質問

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

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

編集:これはすべてのメールクライアントで機能します(送信と受信の両方)

役に立ちましたか?

解決 3

今、私は Content-Disposition inline でないもの、またはMIMEカテゴリがTextまたはImage以外のものをコピーします。 HTMLビューの LinkedResource への Attachment 、任意の inline 、または Image のMIMEカテゴリを持つもの最後のビュー、および AlternateView としてのその他のもの。 (まだテストしていません)

他のヒント

10,000フィートの概要から、ここに私がすることを示します。

MIMEパーツをツリーにフラット化します。各パートには1つ、1つのパートのみが含まれていることを確認してください(マルチパート/関連のような親、またはそのようなものではありません)。

  1. 本文について次の条件を確認します。

    1. 最初の部分がHTMLの場合は、メッセージの本文に設定します

    2. 最初の部分がプレーンテキストで、2番目の部分が not htmlの場合、プレーンテキスト部分をメッセージの本文に設定します。

    3. 最初の部分がプレーンで、2番目の部分がhtmlの場合、2つの代替ビューを作成します。 ***これは、これらの部分にContent-Disposition:attachmentヘッダーがないことを前提としています。

  2. 残りの部分をループします。

    以外のすべてを添付ファイルとして追加します
    1. content-idヘッダーが設定されている画像、または

    2. content-locationヘッダーセットがある
    3. images。

      これらのヘッダーのいずれかが存在する場合、それらの画像をLinkedResourceとして追加します(実際にHTMLの本文部分がある場合のみ)。

これで開始でき、通常のメールの約99%をカバーできます。

multipart / alternative部分に含まれるテキスト部分(text / plain、text / htmlなど)をAlternateViewにマッピングします。また、親タイプに関係なく、最初のテキスト部分をAlternateViewにマップし、単一のテキスト部分のみで構成されるメッセージの場合に対応します。

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

添付ファイルのContent-Dispositionを使用して、これらのパーツを添付ファイルにマッピングします。

インラインのContent-Dispositionを持つ、またはContent-DispositionヘッダーのないそれらのパーツをLinkedResourceにマッピングします。この最後のステップは、Content-IDが特定のテキストパーツから参照されたContent-IDと一致することを確認することで微調整できますが、実際には、この方法で作成されたすべてのLinkedResourcesは最初のtext / html AlternateViewに属すると想定できます(またはtext / htmlタイプのAlternateViewがない場合は、最後に作成されたAlternateView)。

最善の方法ではないかもしれませんが、「未加工の」電子メールを取得して、新しい電子メールに置き換えるだけです

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

System.Net.Mail.MailMessageは、MIMEが提供するものの非常に小さなサブセットのみを提供します。そのため、MIMEパーサーがすべて/ほとんどの標準機能をサポートすることを目的としている場合、MIMEメッセージをMailMessageにコピーするという目標は、せいぜい困難であり、最悪の場合不可能です。 POP3アクセスを提供するライブラリはSMTPアクセスも提供しませんか?もしそうなら、System.Net.Mail.MailMessageをそのままにして、サードパーティのライブラリが提供するものは何でも使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top