经典ASP - 带附件的电子邮件表格 - 请帮忙

时间:2010-04-14 17:14:39

标签: email forms asp-classic save attachment

我已经得到了一个问题,我有一个电子邮件网页表单,将输入发送到电子邮件地址,但我现在需要的是文件输入字段,用户也可以将图像作为附件发送。

所以联系人姓名,徽标(附件)。

我被告知为了发送附件,它需要保存在我的主机上的文件夹中才能发送。我和托管公司说过,他们没有任何东西可以让这更容易,例如aspupload。

在表单name =“contactname”和name =“logo”中我在根目录中有一个名为logos的文件夹(此asp页面也存在于根目录中)

男人,我希望有人可以帮我花时间寻找答案

Dim contactname, logo

contactname = request.form("contactname")
If request("contactname") <> "" THEN
Set myMail=CreateObject("CDO.Message")
myMail.Subject="Form"
myMail.From="web@email"
myMail.To="web@email"
myMail.HTMLBody = "" & contactname & ""
myMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
myMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "relay.host"
myMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
myMail.Configuration.Fields.Update
myMail.Send
set myMail=nothing

4 个答案:

答案 0 :(得分:1)

根据您从输入字段获得的位置格式,您不能只使用以下其中一种吗?您不必将其保存到服务器。

<% 
' ... 

myMail.AddAttachment Server.MapPath("file1.txt") 
myMail.AddAttachment "d:\file2.txt" 
myMail.AddAttachment "file://d:\file3.txt" 

' ...
%>

答案 1 :(得分:1)

您需要使用文件输入控件。基本的想法是你声明你的形式:

<form method="POST" action="YourScript.asp" enctype="multipart/form-data">
<input name="ContactName" type="text" size="50">
<input name="LogoFile" type="file">
<input type="submit" value="Send">
</form>

然后,YourScript.asp应使用ASP上载控件将上传的文件存储在服务器上的某个位置,然后使用CDOSYS的AddAttachment方法。

注意:使用此上传组件时,正常的Request.Form不再可用(由于调用了Response.BinaryRead)。您可以使用此上载控件的Fields集合来获取ContactName值。

这样的ASP上传控件可以在这里找到:

http://www.asp101.com/articles/jacob/scriptupload.asp

http://www.pscode.com/vb/scripts/ShowCode.asp?txtCodeId=7361&lngWId=4

答案 2 :(得分:0)

嗯,是的,如果文件已经存储,我可以使用上述之一,但事实并非如此。该文件将脱离最终用户pc。

所以他们点击表单中的浏览器并导航到那里的pc上的文件。我认为然后需要将其保存到我的主机上的文件中然后插入文件位置就像你已经完成的那样,以便发送它。

答案 3 :(得分:-1)

对于经典的asp,你需要先以二进制数据形式上传文件:

Dim binaryData

为了获得二进制形式的上传文件只是谷歌,你将获得很多经典asp的解决方案。你可以去:http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=7361&lngWId=4

如果您使用上述链接,则应为:

Dim binaryData = objUpload("File1").BLOB & ChrB(0)

此后,您无需将二进制数据存储在database.Just中创建一个记录集对象,如下所示:

 set rset = server.createobject("ADODB.RECORDSET")
 rset.fields.append "FileName", 205, LenB(binaryData)
 rset.open
 rset.addnew
 rset.fields(0).AppendChunk binaryData

然后您可以创建CDO消息对象并继续:

Set myMail=CreateObject("CDO.Message")
'//your mail code here
myMail.Configuration.Fields.Update

binaryData = rset.fields("FileName").value             
Const cdoContentDisposition = "urn:schemas:mailheader:content-disposition"
Const cdoBase64 = "base64"            
Dim attach : Set attach = myMail.Attachments.Add            
attach.ContentMediaType = "application/octet-stream"
attach.ContentTransferEncoding = cdoBase64
'//Here I am just attaching an jpeg image file with fixed name 'myimage.jpg'
attach.Fields(cdoContentDisposition).Value="attachment;filename=""myimage.jpg"""
attach.Fields.Update
Dim oStreamOutput: Set oStreamOutput = attach.GetDecodedContentStream
oStreamOutput.Write binData
oStreamOutput.Flush
myMail.Send
set myMail=nothing

这样您就不需要将上传的文件存储在数据库中或存储在服务器空间中。您可以随时附加文件。希望它有所帮助。