簡體   English   中英

Mimekit / mailkit下載郵件正文?

[英]Mimekit/mailkit download message body?

我最近一直在制作自己的郵件客戶端,並添加了一個接收選項,我使用mimekit和mailkit作為插件,並且能夠使用應該顯示內容的閱讀器下載我的大部分郵件(現在它顯示主題,來自,來自, ,日期)

我下載主題的方式是,...是msg.envelope.subject,msg.envelope.to但我無法下載這樣的身體:(當做msg.body,msg.textbody,msg.bodyparts ,. ..他們都導致了NOTHING,它應該是空的地方,我無法下載:(

誰能幫我?

獲取郵件正文有兩種方法:

1.下載整個消息

這種方法可能是最簡單的方法。

要做到這一點,您需要做的就是致電:

var message = folder.GetMessage (uid);

要么

var message = folder.GetMessage (index);

我建議始終使用消息的UniqueId 由於您已經在使用Fetch方法,因此要確保您擁有消息的UniqueId ,您需要做的就是在獲取請求中包含MessageSummaryItems.UniqueId

var messages = folder.Fetch (0, -1, MessageSummaryItems.UniqueId |
    MessageSummaryItems.Envelope | ...);

收到消息后,您可以隨心所欲地做任何事情。

為了呈現消息,我建議您查看MimeKit GitHub存儲庫中包含的MessageReader示例。

它將向您展示如何正確呈現MimeMessage

2.僅下載您需要的內容

這種方法有點難,但網絡帶寬的使用而言可能更有效。

您需要做的第一件事是確保在Fetch方法中包含MessageSummaryItems.BodyStructure位標志。 例如:

var messages = folder.Fetch (0, -1, MessageSummaryItems.Envelope | 
    MessageSummaryItems.BodyStructure);

(您可能需要其他字段,但這只是一個示例,向您展示如何按位或標記一起請求多個消息摘要項)。

通過請求消息的BodyStructure ,您將能夠使用msg.Body屬性。

每個msg.Body都是一個BodyPart對象,它是一個抽象類。 2個主要的子類是BodyPartMultipartBodyPartBasic 您可以使用as cast或is關鍵字來確定它是哪一個:

var multipart = msg.Body as BodyPartMultipart;

if (multipart != null) {
    // the top-level body part is a multi-part
} else {
    // the body is a basic singleton part
}

這是你如何迭代BodyPartMultipart的子部分:

foreach (var part in multipart.BodyParts) {
    // each part will either be a BodyPartMultipart
    // or a BodyPartBasic, just like before...
}

還有2個BodyPartBasic子類: BodyPartTextBodyPartMessage BodyPartText是基於文本的MIME部分(意味着它具有MIME類型text/* ),而BodyPartMessage是嵌入式消息(並且將具有MIME類型的message/rfc822 )。

由於MIME是遞歸的,因此您需要實現一個遞歸函數來遍歷MIME樹結構以查找您要查找的任何MIME部分。

為方便起見, IMessageSummary界面上的TextBodyHtmlBody屬性將分別定位並返回text/plaintext/html正文部分。

但是應該注意,這些屬性僅適用於消息結構遵循標准約定的情況(注意我所說的約定 ,沒有正式標准規定消息文本在MIME層次結構中的位置)。

還應該注意的是,如果您的郵件客戶端將呈現HTML正文,則HTML正文部分可能是一組相關MIME部分(即multipart/related的子HtmlBody )的一部分,但HtmlBody屬性將無法返回它,因此實現自己的遞歸邏輯將是一個更好的選擇。

有關如何執行此ImapClientDemo示例,請查看MailKit GitHub存儲庫中的ImapClientDemo示例。 邏輯當前位於MainWindow.cs代碼中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM