3


1

MIMEツリーをMailMessageに変換する

私は電子メールメッセージを処理し転送するC#プログラムを書いています。 POP3ライブラリとMIMEパーサーがあり、MIMEツリーを `+ System.Net.Mail.MailMessage +`にコピーする必要があります。

さまざまなMIMEパーツを + AlternateView + s、 + LinkedResource + s、および + Attachment + sにマッピングする最良の方法は何ですか?

編集:全てのメールクライアント(送信と受信の両方)で動作します。

5 Answer


2


10,000フィートの概観から、これが私がすることです。

あなたのパントマイム部品を木に平らにしなさい。 各パートに1つだけ含まれていることを確認してください(multipart / relatedのような親、またはそのようなものではありません)。

  1. 本体について次の条件を確認してください。

    1. If the 1st part is HTML,set it to the body of the message

    2. If the 1st part is plain text, and the 2nd part is not html, set メッセージ本文のプレーンテキスト部分

    3. If the first part is plain, and the 2nd part is html, create 2 代替ビュー ***これはこれらの部分のどれもがContent-Disposition:アタッチメントヘッダを持っていないと仮定します。

  2. 残りの部分をループします。 以下を除いて、他のすべてを添付ファイルとして追加します。

    1. images that have a content-id header set, or

    2. images that have a content-location header set. これらのヘッダの1つが存在する場合は、それらの画像をLinkedResourceとして追加します(実際にはHTML本体部分がある場合のみ)。

それであなたは始められるでしょう、そしてそこに通常の電子メールの約99%をカバーするべきです。


1


マルチパート/代替パートに含まれるテキストパート(text / plain、text / htmlなど)をAlternateViewにマッピングします。 また、1つのテキスト部分のみで構成されるメッセージの場合に対応するために、最初のテキスト部分をその親の種類に関係なくAlternateViewにマッピングします。

Content-Dispositionヘッダーに応じて、残りの部分をAttachmentまたはLinkedResourceにマップします。

添付ファイルのContent-Dispositionでこれらの部分を添付ファイルにマップします。

インラインのContent-DispositionまたはContent-Dispositionヘッダーのない部分をLinkedResourceにマッピングします。 この最後のステップは、Content-IDが特定のテキスト部分から参照されているContent-IDと一致することを確認することによって洗練されますが、実用上、この方法で作成されたすべてのLinkedResourcesは最初のtext / html AlternateViewに属します(またはtext / html型のAlternateViewがない場合は、最後に作成されたAlternateView)。


0


現在、「+ Inline 」ではない「 Content-Disposition 」、またはテキストまたは画像以外のMIMEカテゴリを持つものを「 Attachment 」、「 inline 」にコピーしています。 、またはHTMLビューまたは最後のビューの ` Image `から ` LinkedResource `へのMIMEカテゴリを持つもの、および ` AlternateView +`としてのその他のもの。 (私はまだこれをテストしていません)


0


最善の方法ではないかもしれませんが、私は「生の」Eメールを取得し、新しいEメールで単にtoに置き換えることを試みるでしょう


0


うーん、あなたは絶対にSystem.Net.Mail.MailMessageを使用する必要がありますか?

System.Net.Mail.MailMessageは、MIMEが提供するもののごく一部しか提供していません。 そのため、あなたのMIMEパーサーが全ての/ほとんどの標準的な機能をサポートすることを目的としているならば、あなたのMIMEメッセージをMailMessageにコピーするというあなたの目標は、最善でも最悪でも不可能です。 POP3アクセスを提供するライブラリはSMTPアクセスも提供しませんか? もしそうなら、私はSystem.Net.Mail.MailMessageをそのままにして、サードパーティーのライブラリが提供するものは何でも使用します。