2009-06-16 63 views
3

我正在寫處理和轉發電子郵件消息的C#程序。我有一個POP3庫和一個MIME解析器,我需要將MIME樹複製到System.Net.Mail.MailMessage轉換MIME樹MAILMESSAGE到

將不同MIME部件映射到AlternateView s,LinkedResource s和Attachment s的最佳方式是什麼?

編輯:可以使用所有的郵件客戶端的工作(發送和接收)

回答

0

現在,我什麼複製與Content-Disposition這是不inline,或與其他任何一個MIME類型比文本或圖像,到Attachment,什麼inline,或任何具有MIME類型的ImageLinkedResource在HTML視圖或最後一個視圖,和其他任何爲AlternateView。 (我沒有測試過這還)

0

可能不是最好的方式,但我會設法使「原始」的電子郵件,並只需更換到與新的電子郵件

+0

SmtpClient無法發送原始MIME源 – SLaks 2009-06-16 11:54:49

2

從10,000英尺的概述,這是我會做的。

拼合您的MIME部分成一棵樹。確保每個部分包含1個,只有1個部分(不是像multipart/related這樣的父類,或類似的東西)。

  1. 檢查下列條件的,身體:

    1. 如果第1部分是HTML,它設置爲消息

    2. 的身體。如果第1部分是純文本,和第二部分是不HTML,設置純文本部分的消息的主體。

    3. 如果第一部分易懂,並且第二部分是HTML格式,創建2個備選視圖。 ***這個假設這些部分都沒有內容處置:附件標題。

  2. 循環通過其餘部分。添加一切作爲附件,只是有一個內容ID標頭集合

    1. 圖像,或有一個Content-Location報頭組

    2. 圖像。

      如果其中一個標題存在,那麼我會將這些圖像作爲LinkedResource添加(僅當實際上存在HTML正文部分時)。

這應該讓你開始,並覆蓋正常的電子郵件的約99%在那裏。

0

嗯,你絕對需要使用System.Net.Mail.MailMessage嗎?

System.Net.Mail。MailMessage只提供MIME提供的非常小的子集。因此,如果您的MIME解析器旨在支持所有/大多數標準功能,那麼將MIME消息複製到MailMessage中的目標最多也就是困難,而且最糟糕的情況是不可能的。提供POP3訪問的庫是否也提供SMTP訪問?如果是這樣,我會離開System.Net.Mail.MailMessage,並與第三方庫提供的任何東西。

1

地圖的任何文本部分被包含多部分/替代部分到AlternateView內(文本/無格式,文本/ HTML等)。還可以將遇到的第一個文本部分映射到AlternateView,而不考慮其父類型,以迎合僅由單個文本部分組成的消息的情況。

剩餘部分映射到一個附件或LinkedResource,取決於內容處理標頭。

地圖帶有附件的內容處置的那些部分,以一個附件。

地圖那些部分內聯的內容處置,或沒有內容處理標頭,一個LinkedResource。這最後一步可以通過檢查內容ID相匹配的內容ID稱爲從一個特定的文本部分,但出於實用的目的,可以假定,以這種方式創建的所有LinkedResources屬於第一text/html的AlternateView被巧妙(或者如果沒有類型爲text/html的AlternateView,則創建最後一個AlternateView)。