3

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

異なる MIME パーツをAlternateViews、LinkedResources、およびAttachments にマップする最良の方法は何ですか?

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

4

5 に答える 5

2

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

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

  1. ボディの次の条件を確認します。

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

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

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

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

    1. content-id ヘッダーが設定された画像、または

    2. content-location ヘッダーが設定された画像。

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

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

于 2009-06-16T14:33:10.490 に答える
1

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)。

于 2011-01-28T19:16:28.147 に答える
0

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

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

于 2009-06-17T11:58:07.583 に答える
0

現在、HTML ビューまたは最後のビューで、Content-Dispositionではないinline、または Text または Image 以外の MIME カテゴリを含むものを、 、 any 、または MIME カテゴリがaAttachmentinlineものにコピーしています。 、その他は. (私はまだこれをテストしていません)ImageLinkedResourceAlternateView

于 2009-06-16T11:44:18.193 に答える
0

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

于 2009-06-16T11:46:06.303 に答える