使用经典ASP

Mail with multiple attachment using classic ASP

本文关键字:ASP 经典      更新时间:2023-09-26

我是处理应用程序的经典ASP的新手,我需要通过电子邮件发送附件。我尝试了很多事情,但仍然找不到合适的解决方案。我可以发送没有附件的电子邮件。

除了附件,一切都很好。我看到许多解决方案建议,在发送附件之前,我需要将文件上传到服务器。我在表单操作中调用了一个页面uploaddocument.asp(此页面使用VBscript),它在点击发送后在服务器上上传文档,它正在上传文档,但它没有发送电子邮件。

请建议是否有任何方法将这些附件存储在临时文件夹中,以便在发送后自动删除。

是否可以设计附件的功能,如yahoomail,或带有进度条的gmail,使用经典的aspjavascript/VBscript删除附件的选项。

请找到伪代码。

MailTest.asp

<%@ Language=JavaScript%>
<%
Server.ScriptTimeout = 900;
var fso = new ActiveXObject("Scripting.FileSystemObject");
function mailObject() 
{
var mailObject = new ActiveXObject("CDO.Message");
mailObject.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2;
mailObject.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtprelay.p3chem.net";
mailObject.Configuration.Fields.Update();

mailObject.From = "ABC@msg2.XYZ.com";
return (mailObject);
}

var mailMessage = new mailObject();
messageText = "Test";
emailID="tarun.0shrivastav@xyz.com";
AssetmailID ="vikrant.1mittal@XYZ.com";
messageSubject ="test";
var op = String(Request("op"));
%>
<%
Response.write("<form method ='Post' action ='UploadDocument.asp' enctype='multipart/form-data'> 'n");
Response.write("'n'nRecipient(s):
<textarea name=to rows=3 >"+emailID+"</textarea>*
'n'
(list of email addresses, separated by semicolon)
'n");
Response.write("'n'nCc:
<textarea name=cc rows=2 >" + AssetmailID + "</textarea>
'n'
(list of email addresses, separated by semicolon)
'n");
Response.write("Subject:
<input type=text name=subject size=60 >*
'n");
Response.write("Message:
<textarea name=message rows=15 cols=100 >" + messageText + "</textarea>*
'n");
Response.write("<form id = form2 method ='Post' action ='UploadDocument.asp' enctype='multipart/form-data'> 'n"); 
Response.write("Attachment 1 : <input type=file name=File1>") ;

Response.write( "
<Input Type=Button Value='Add a file' >
") ;
Response.write("</form>'n");
Response.write("<input type=submit name=send value='Send Message'>
'n");
Response.write("<input type=hidden name=op value=send>");
Response.write("</form>'n");
switch (op) {
case ("Select"):
case ("send"):

try {
mailMessage.to =emailID;
mailMessage.Cc= AssetmailID 
mailMessage.Bcc = "vikrant.mittalMNC.com";
mailMessage.From = "ABc@xyz.com";
mailMessage.Subject = String(Request("subject"));
mailMessage.HtmlBody = String(Request("message"));

mailMessage.Send();
Response.Write("<script language='javascript'>alert('Mail successfully sent')</script>");
Response.Write("'nMail has been sent successfully ");
}
catch (err) {
Response.Write(err.message);
mailMessage.Bcc = "";
mailMessage.From = "";
mailMessage.Subject = String(Request("subject"));
mailMessage.HtmlBody = "ERROR: Mail was not sent succesfully, Check whether All Mail ID's are Valid.";
mailMessage.Send();
Response.Write("<script language='javascript'>alert('Mail was not sent succesfully')</script>");
Response.Write("Mail was not sent succesfully, Check whether All Mail ID's are Valid.'n'n" + Assessors);
}
break;
default:
Response.write ("Done");
}

%>

<Script>
//Script To add a attachment file field 
var nfiles = 1;
function Expand()
{
nfiles++
var adh = '
Attachment '+nfiles+' : <input type="file" name="File'+nfiles+'" action ="UploadDocument.asp" enctype="multipart/form-data">';
files.insertAdjacentHTML('beforeend',adh);
return false;
}
</Script>
code of UploadDocument.asp

<% @ Language= VBScript%> 
<%Option Explicit%>
<html>
<body>
<!-- #include file="lib'lib_vbFunctions.asp" -->
<%
Server.ScriptTimeout = 900
Dim Uploader, File, startTime, endTime, markTime1, totalTime, uploadTime, encType
Set Uploader = New FileUploader
startTime = Time
' This starts the upload process
Uploader.Upload()
markTime1 = Time
' Check if any files were uploaded
If Uploader.Files.Count = 0 Then
Response.Write "File(s) not uploaded."
Else
' Loop through the uploaded files
For Each File In Uploader.Files.Items
encType = File.ContentType
If (Len(encType) >= 50) Then encType = "application/octet-stream"
File.ADOSaveToDisk "F:''CSDATA''My_attachment",File.FileName
endTime = Time
totalTime = (endTime - startTime) * 10000000
uploadTime = (markTime1 - startTime) * 10000000
' Output the file details to the browser
Response.Write "File Uploaded: " & File.FileName & "
"
Response.Write "Size: " & File.FileSize & " bytes
"
Next
END if
%>
</body>
</html>

如何将上传的文件作为附件发送?

这是我在所见即所得中在服务器上上传文件时使用的技巧

  1. 考虑电子邮件表单中名为附件的输入字段
  2. 在这个输入旁边放一个假的按钮,比如浏览
  3. 点击假按钮,模拟点击文档中其他隐藏的FORM。第二个表单将文件发送到上传器,并从上传器接收文件名。为了防止提交第二个表单并刷新页面,请使用Jquery.form.js上传文件,然后onSuccess将上传的FileName传递到名为附件的真实输入中

真实电子邮件形式:

<form action="sendEmail.asp" method="post">
    <input name="attachment"><a onclick="$('#hiddenFileField').click()">Browse</a>
    <!--other fields of email form-->
</form>

在服务器上上传文件的隐藏表单:

<form id="hiddenForm" action="File-Uploader.asp" enctype="multipart/form-data" method="post" accept-charset="utf-8">
    <input name="file1" id="hiddenFileField" type="file">
</form>

这是处理这个过程的脚本:

$(document).ready(function(){
     $('#hiddenForm').ajaxForm({
       beforeSubmit: function() {
       $("#stat").html('uploading...');
       },
       success: function(data) {
           $("#attachment").val(data);
           $("#stat").html("");
       }
    });
    // The code to submit hidden form as soon as file selected to upload:
    $("#hiddenFileFild").change(function(){$("#hiddenForm").submit();})
});

您可以在使用#状态完成上传之前修改代码以阻止提交main。

最后,您可以在发送电子邮件后删除临时文件:

<%
dim fs
dim file
file=server.mappath(request.form("attachment")))
Set fs=Server.CreateObject("Scripting.FileSystemObject")
if fs.FileExists(file) then
  fs.DeleteFile(file)
end if
%>