7

VBScript で MHTML ファイルを添付ファイルとして電子メール メッセージに追加しようとすると、ContentMediaType誤って"message/rfc822"( RFC 822 ) に設定されます。私が理解していることから、これはマイクロソフトによれば正しいですが、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"if (文字列) がor (大文字と小文字を区別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暗黙的に呼び出されると思います。FieldsUpdate

"multipart/related"これを回避し、適切なファイル拡張子を維持しながら、コンテンツ タイプを含む MHTML ファイルを送信するにはどうすればよいですか?

4

1 に答える 1

6

したがって、添付ファイルのコンテンツ タイプがcontent-type="message/rfc822".

まず、問題の根本原因の分析に欠陥があることに注意してください。multipart/relatedあなたは、 MIME タイプがどこに影響を与えるかについて混乱しているようです。実際のところ、RFC 2557では、MHTML 添付ファイルに対応する本文部分content-type="multipart/related". 代わりに、MIME multipart/related は MHTML ファイル自体の内部構造です。ウィキペディアの記事を引用:

MHTML ファイルのコンテンツは、MIME タイプ multipart/related を使用して、HTML 電子メール メッセージであるかのようにエンコードされます。

つまり、MHTML ファイルをテキスト エディタで開くと、次のように表示されます。

Content-Type: multipart/related; ...

Microsoft はcontent-type="message/rfc822"KB937912で MHTML ファイルを提供する必要があると述べています。これは、メソッドを介してこのようなファイルを添付するときに、CDO がデフォルトで行うこととまったく同じですAddAttachment。私は、そのような振る舞いが RFC 2557 と矛盾することはないと信じています。RFCに従って:

ルート リソースと、そのルート リソース内の URI によって参照されるいくつかの別個の補助リソースで構成されるドキュメントを指定するドキュメント形式は多数あります。このようなマルチリソース ドキュメントを電子メール [SMTP]、[RFC822] メッセージで送信できるようにする必要があることは明らかです。

このドキュメントで定義されている標準は、正確にこの目的のために、MIME 形式の [MIME1 から MIME5] メッセージでそのようなマルチリソース ドキュメントを集約する方法を指定しています。

要約すると、MHTML 添付ファイルのコンテンツ タイプを に設定しないでくださいmultipart/related

MHTMLファイルで使用するmessage/rfc822方法のようですが、質問で説明した問題を明らかに引き起こします。Outlook 2010 と OWA 2010 でテストしたところ、再現できました。

さまざまな電子メール クライアントで MHTML 添付ファイルに使用される代替コンテンツ タイプはapplication/octet-stream、 とapplication/x-mimearchiveです。これら 2 つは、私のテストでは問題を示しませんでした。

于 2013-04-27T12:37:59.733 に答える