[英]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個主要的子類是BodyPartMultipart
和BodyPartBasic
。 您可以使用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
子類: BodyPartText
和BodyPartMessage
。 BodyPartText
是基於文本的MIME部分(意味着它具有MIME類型text/*
),而BodyPartMessage
是嵌入式消息(並且將具有MIME類型的message/rfc822
)。
由於MIME是遞歸的,因此您需要實現一個遞歸函數來遍歷MIME樹結構以查找您要查找的任何MIME部分。
為方便起見, IMessageSummary
界面上的TextBody
和HtmlBody
屬性將分別定位並返回text/plain
和text/html
正文部分。
但是應該注意,這些屬性僅適用於消息結構遵循標准約定的情況(注意我所說的約定 ,沒有正式標准規定消息文本在MIME層次結構中的位置)。
還應該注意的是,如果您的郵件客戶端將呈現HTML正文,則HTML正文部分可能是一組相關MIME部分(即multipart/related
的子HtmlBody
)的一部分,但HtmlBody
屬性將無法返回它,因此實現自己的遞歸邏輯將是一個更好的選擇。
有關如何執行此ImapClientDemo
示例,請查看MailKit GitHub存儲庫中的ImapClientDemo
示例。 邏輯當前位於MainWindow.cs代碼中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.