【发布时间】:2015-05-27 17:33:10
【问题描述】:
我正在尝试发送一封带有 PDF 附件的电子邮件。我有二进制/Base64 格式的附件数据,但是当我尝试将其写入流时,它不起作用。这是我的代码。我正在使用来自这里的上传类 - http://www.codeguru.com/csharp/.net/net_asp/article.php/c19297/Pure-ASP-File-Upload.htm
<!--METADATA TYPE="TypeLib" FILE="C:\windows\system32\cdosys.dll" -->
<!-- #include file="upload.asp" -->
<%
' Create the FileUploader
Dim Uploader, File
Set Uploader = New FileUploader
' This starts the upload process
Uploader.Upload()
Dim uploadFileName
Dim uploadFileData
' Check if any files were uploaded
If Uploader.Files.Count > 0 Then
' Loop through the uploaded files
For Each File In Uploader.Files.Items
uploadFileName = File.FileName
uploadFileData = File.FileData
Next
End If
Set ObjMailer = CreateObject("CDO.Message")
Set iConf = Server.CreateObject("CDO.Configuration")
Set Flds = iConf.Fields
With Flds
.Item(cdoSendUsingMethod) = cdoSendUsingPort
.Item(cdoSMTPServer) = "localhost"
.Item(cdoSMTPServerPort) = 5000
.Item(cdoSMTPconnectiontimeout) = 10
.Update
End With
Set ObjMailer.Configuration = iConf
ObjMailer.Subject = "Subject"
ObjMailer.From = "from@testdomain.com"
ObjMailer.To = "to@testdomain.com"
ObjMailer.HTMLBody = "<h1>This is a sample html email body</h1>"
' Code to Attach the Email
Const cdoContentDisposition = "urn:schemas:mailheader:content-disposition"
Dim oPart : Set oPart = ObjMailer.Attachments.Add
oPart.ContentMediaType = "application/pdf"
oPart.Fields(cdoContentDisposition).Value = "attachment;filename=""Test.pdf"""
oPart.Fields.Update
Dim oStreamOut: Set oStreamOut = oPart.GetDecodedContentStream
oStreamOut.Type = 1
oStreamOut.Write uploadFileData
oStreamOut.Flush
ObjMailer.Send
Set ObjMailer = Nothing
Set iConf = Nothing
Set Flds = Nothing
If Err.number <> 0 Then
Response.Write "Error: " & Err.Number
Response.Write "Error (Hex): " & Hex(Err.Number)
Response.Write "Source: " & Err.Source
Response.Write "Description: " & Err.Description
End If
我收到以下错误。我不知道我哪里错了。
ADODB.StreamDescription: Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.
有人可以帮忙吗?
【问题讨论】:
-
oStreamOut.Write base64你能显示填充base64的代码吗? -
您是否尝试更改 oStreamOut.Type = 0
-
你的意思是你有一个base64编码的文件,你想把它附加到电子邮件中。这里的问题是二进制编码为 base64,
ADODB.Stream首先无法理解,您需要解码 base64 以返回原始二进制。但是,如果您已经拥有附件数据,那么您的代码将毫无意义,为什么需要将其流出?目前,代码回溯到前面。 -
@GELR
StreamTypeEnum是adTypeBinary = 1和adTypeText = 2没有0。 -
由于您使用
METADATA导入类型信息,您需要删除声明Const cdoContentDisposition,否则您将收到运行时错误name redefined。然后你需要确保varType(uploadFileData) = vbArray + vbByte因为错误Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.意味着你传递了一个意外类型的参数。由于您的流是二进制的,因此您需要传递一个字节数组,但uploadFileData显然不是。
标签: iis vbscript asp-classic cdo.message