Ändern des Inhaltstyps einer Anlage in einem CDO.Message-Objekt
Wenn ich versuche, eine MHTML-Datei als Anhang zu einer E-Mail-Nachricht in VBScript hinzuzufügen, wird dieContentMediaType
ist falsch eingestellt auf"message/rfc822"
(RFC 822). Soweit ich weiß, ist dies laut Microsoft korrekt, aber laut Microsoft falschRFC 2557 was besagt, dass es sein sollte"multipart/related"
. Dies ist ein Problem, da die meisten (wenn nicht alle) E-Mail-Clients interpretieren"message/rfc822"
als E-Mail-Nachricht. Seit den Dateierweiterungen".mht"
und".mhtml"
Entspricht keine gültige Dateierweiterung einer E-Mail-Nachricht, hängt der E-Mail-Client eine an".msg"
, ".eml"
usw. zum Dateinamen. Wenn ein Benutzer den Anhang öffnet, wird er als E-Mail-Nachricht geöffnet und nicht korrekt angezeigt, da eine MHTML-Datei und eine E-Mail-Nachricht unterschiedlich gespeichert werden.
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
Wenn ich diesen Code ausführe,Message.Attachments.Item(1).ContentMediaType
ist eingestellt auf"message/rfc822"
. Ich muss es sein"multipart/related"
obAttachment
(eine Zeichenfolge) endet mit".mht"
oder".mhtml"
(Groß- / Kleinschreibung wird nicht berücksichtigt). Ich kann dies mit dem folgenden Code tun.
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
Aus einem unbekannten Grund wird hierdurch der Anhang von aufgehobenMessage.Attachments
.
Ich habe mir das manuelle Hinzufügen des Anhangs per angeschautdiese Anweisungen, aber wenn ich anrufeMessage.Attachments.Item(1).Fields.Update
wird das Objekt undefiniert. Ich denke, die Anhänge einzustellenContentMediaType
, ruft implizit es aufFields
'sUpdate
Methode, die meiner Meinung nach für dieses unerwartete Verhalten verantwortlich ist.
Wie kann ich das umgehen und mit dem eine MHTML-Datei verschicken?"multipart/related"
Inhaltstyp unter Beibehaltung der richtigen Dateierweiterung?