Modificando o tipo de conteúdo de um anexo em um objeto CDO.Message
Quando tento adicionar um arquivo MHTML como um anexo a uma mensagem de email no VBScript,ContentMediaType
está incorretamente configurado para"message/rfc822"
(RFC 822). Pelo que entendi, isso está correto de acordo com a Microsoft, mas está incorreto de acordo comRFC 2557 que afirma que deve ser"multipart/related"
. Isso é um problema, porque a maioria dos clientes de email (se não todos)"message/rfc822"
como uma mensagem de email. Desde as extensões de arquivo".mht"
e".mhtml"
não corresponde a nenhuma extensão de arquivo válida de uma mensagem de email, o cliente de email anexa".msg"
, ".eml"
, etc. para o nome do arquivo. Quando um usuário abre o anexo, ele é aberto como uma mensagem de e-mail e não é exibido corretamente, pois um arquivo MHTML e uma mensagem de e-mail são salvos de forma diferente.
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
Quando eu executo este código,Message.Attachments.Item(1).ContentMediaType
está configurado para"message/rfc822"
. Eu preciso que seja"multipart/related"
E seAttachment
(uma string) termina com".mht"
ou".mhtml"
(insensível a maiúsculas e minúsculas). Eu posso fazer isso com o seguinte código.
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
Por alguma razão desconhecida, isso não define oMessage.Attachments
.
Eu olhei para adicionar manualmente o anexo porestas instruçõesmas quando eu chamoMessage.Attachments.Item(1).Fields.Update
, o objeto se torna indefinido. Eu acho que a fixação dos anexosContentMediaType
, implicitamente invoca éFields
'sUpdate
método que é o que eu acho que é responsável por esse comportamento inesperado.
Como posso contornar isso e enviar um arquivo MHTML com o"multipart/related"
tipo de conteúdo, mantendo a extensão de arquivo adequada?