Изменение типа содержимого вложения в объекте CDO.Message
Когда я пытаюсь добавить файл 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"
, Мне нужно чтобы это было"multipart/related"
еслиAttachment
(строка) заканчивается".mht"
или же".mhtml"
(без учета регистра). Я могу сделать это с помощью следующего кода.
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
.
Я смотрел на ручное добавление вложения в соответствии сэти инструкции, но когда я звонюMessage.Attachments.Item(1).Fields.Update
объект становится неопределенным. Я думаю, что установка вложенияContentMediaType
неявно вызывает этоFields
«sUpdate
метод, который, как я думаю, ответственен за это неожиданное поведение.
Как я могу обойти это и отправить файл MHTML с"multipart/related"
тип содержимого при сохранении правильного расширения файла?