【发布时间】:2013-04-05 07:17:51
【问题描述】:
当我尝试将 MHTML 文件作为附件添加到 VBScript 中的电子邮件时,ContentMediaType 被错误地设置为 "message/rfc822" (RFC 822)。据我了解,根据 Microsoft 的说法这是正确的,但根据 RFC 2557 的说法是不正确的,它应该是 "multipart/related"。这是一个问题,因为大多数(如果不是全部)邮件客户端将"message/rfc822" 解释为电子邮件消息。由于文件扩展名".mht" 和".mhtml" 与电子邮件消息的任何有效文件扩展名都不匹配,因此邮件客户端将".msg"、".eml" 等之一附加到文件名。当用户打开附件时,它会作为电子邮件打开,并且无法正确显示,因为 MHTML 文件和电子邮件的保存方式不同。
Sub SendEmail(FromAddress, ToAddress, Subject, Body, Attachment)
Call Err.Clear
On Error Resume Next
Schema = "http://schemas.microsoft.com/cdo/configuration/"
Set Configuration = Sys.OleObject("CDO.Configuration")
Configuration.Fields.Item(Schema + "sendusing") = 2
Configuration.Fields.Item(Schema + "smtpserver") = SMTPServer
Configuration.Fields.Item(Schema + "smtpserverport") = 25
Configuration.Fields.Item(Schema + "smtpauthenticate") = 1
' Configuration.Fields.Item(schema + "sendusername") = ""
' Configuration.Fields.Item(schema + "sendpassword") = ""
Call Configuration.Fields.Update
Set Message = Sys.OleObject("CDO.Message")
Set Message.Configuration = Configuration
Message.From = FromAddress
Message.To = ToAddress
Message.Subject = Subject
Message.HTMLBody = Body
If Not IsEmpty(Attachment) Then
'CDO.Message.AddAttachment doesn't set the correct content media type for an MHTML file.
Call Message.AddAttachment(Attachment)
End If
Call Message.Send
End Sub
当我运行此代码时,Message.Attachments.Item(1).ContentMediaType 设置为 "message/rfc822"。如果Attachment(字符串)以".mht" 或".mhtml"(不区分大小写)结尾,我需要它为"multipart/related"。我可以用下面的代码做到这一点。
If Len(Attachment) >= 4 And InStr(Len(Attachment) - 3, Attachment, ".mht", vbTextCompare) Or Len(Attachment) >= 4 And InStr(Len(Attachment) - 5, Attachment, ".mhtml", vbTextCompare) Then
Message.Attachments.Item(1).ContentMediaType = "multipart/related"
End If
由于某些未知原因,这会取消定义来自 Message.Attachments 的附件。
我已经查看了每个 these instructions 手动添加附件,但是当我调用 Message.Attachments.Item(1).Fields.Update 时,对象变得未定义。我认为设置附件的ContentMediaType,隐式调用它的Fields 的Update 方法,我认为这是造成这种意外行为的原因。
我怎样才能解决这个问题并发送具有"multipart/related" 内容类型的 MHTML 文件,同时保持正确的文件扩展名?
【问题讨论】:
-
@IlyaKurnosov,我已经尝试过 Microsoft Outlook 2010、Apple Mail(在 iPhone 上)和我的网络客户端 (Exchange)。
标签: email vbscript content-type email-attachments mhtml