Modyfikowanie typu zawartości załącznika w obiekcie CDO.Message
Kiedy próbuję dodać plik MHTML jako załącznik do wiadomości e-mail w VBScript,ContentMediaType
jest nieprawidłowo ustawiony na"message/rfc822"
(RFC 822). Z tego, co rozumiem, jest to zgodne z Microsoftem, ale jest niepoprawneRFC 2557 które mówi, że powinno być"multipart/related"
. Jest to problem, ponieważ większość (jeśli nie wszyscy) klienci poczty interpretują"message/rfc822"
jako wiadomość e-mail. Od rozszerzeń plików".mht"
i".mhtml"
nie pasuje do żadnego poprawnego rozszerzenia pliku wiadomości e-mail, klient poczty dołącza jeden z".msg"
, ".eml"
itd. do nazwy pliku. Gdy użytkownik otwiera załącznik, otwiera się jako wiadomość e-mail i nie wyświetla się poprawnie, ponieważ plik MHTML i wiadomość e-mail są zapisywane inaczej.
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
Kiedy uruchomię ten kod,Message.Attachments.Item(1).ContentMediaType
jest ustawione na"message/rfc822"
. Potrzebuję tego"multipart/related"
JeśliAttachment
(ciąg) kończy się na".mht"
lub".mhtml"
(bez rozróżniania wielkości liter). Mogę to zrobić za pomocą następującego kodu.
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
Z niewiadomego powodu powoduje to usunięcie załącznika zMessage.Attachments
.
Sprawdziłem ręczne dodawanie załącznika nate instrukcje, ale kiedy dzwonięMessage.Attachments.Item(1).Fields.Update
, obiekt staje się niezdefiniowany. Myślę, że ustawianie załącznikówContentMediaType
, domyślnie wywołuje toFields
jestUpdate
Metoda, która moim zdaniem jest odpowiedzialna za to nieoczekiwane zachowanie.
Jak mogę to obejść i wysłać plik MHTML za pomocą"multipart/related"
typ zawartości przy zachowaniu prawidłowego rozszerzenia pliku?