我正在寫處理和轉發電子郵件消息的C#程序。我有一個POP3庫和一個MIME解析器,我需要將MIME樹複製到System.Net.Mail.MailMessage
。轉換MIME樹MAILMESSAGE到
將不同MIME部件映射到AlternateView
s,LinkedResource
s和Attachment
s的最佳方式是什麼?
編輯:可以使用所有的郵件客戶端的工作(發送和接收)
我正在寫處理和轉發電子郵件消息的C#程序。我有一個POP3庫和一個MIME解析器,我需要將MIME樹複製到System.Net.Mail.MailMessage
。轉換MIME樹MAILMESSAGE到
將不同MIME部件映射到AlternateView
s,LinkedResource
s和Attachment
s的最佳方式是什麼?
編輯:可以使用所有的郵件客戶端的工作(發送和接收)
現在,我什麼複製與Content-Disposition
這是不inline
,或與其他任何一個MIME類型比文本或圖像,到Attachment
,什麼inline
,或任何具有MIME類型的Image
到LinkedResource
在HTML視圖或最後一個視圖,和其他任何爲AlternateView
。 (我沒有測試過這還)
可能不是最好的方式,但我會設法使「原始」的電子郵件,並只需更換到與新的電子郵件
從10,000英尺的概述,這是我會做的。
拼合您的MIME部分成一棵樹。確保每個部分包含1個,只有1個部分(不是像multipart/related這樣的父類,或類似的東西)。
檢查下列條件的,身體:
如果第1部分是HTML,它設置爲消息
的身體。如果第1部分是純文本,和第二部分是不HTML,設置純文本部分的消息的主體。
如果第一部分易懂,並且第二部分是HTML格式,創建2個備選視圖。 ***這個假設這些部分都沒有內容處置:附件標題。
循環通過其餘部分。添加一切作爲附件,只是有一個內容ID標頭集合
圖像,或有一個Content-Location報頭組
圖像。
如果其中一個標題存在,那麼我會將這些圖像作爲LinkedResource添加(僅當實際上存在HTML正文部分時)。
這應該讓你開始,並覆蓋正常的電子郵件的約99%在那裏。
嗯,你絕對需要使用System.Net.Mail.MailMessage嗎?
System.Net.Mail。MailMessage只提供MIME提供的非常小的子集。因此,如果您的MIME解析器旨在支持所有/大多數標準功能,那麼將MIME消息複製到MailMessage中的目標最多也就是困難,而且最糟糕的情況是不可能的。提供POP3訪問的庫是否也提供SMTP訪問?如果是這樣,我會離開System.Net.Mail.MailMessage,並與第三方庫提供的任何東西。
地圖的任何文本部分被包含多部分/替代部分到AlternateView內(文本/無格式,文本/ HTML等)。還可以將遇到的第一個文本部分映射到AlternateView,而不考慮其父類型,以迎合僅由單個文本部分組成的消息的情況。
剩餘部分映射到一個附件或LinkedResource,取決於內容處理標頭。
地圖帶有附件的內容處置的那些部分,以一個附件。
地圖那些部分內聯的內容處置,或沒有內容處理標頭,一個LinkedResource。這最後一步可以通過檢查內容ID相匹配的內容ID稱爲從一個特定的文本部分,但出於實用的目的,可以假定,以這種方式創建的所有LinkedResources屬於第一text/html的AlternateView被巧妙(或者如果沒有類型爲text/html的AlternateView,則創建最後一個AlternateView)。
SmtpClient無法發送原始MIME源 – SLaks 2009-06-16 11:54:49