我正在使用 C# 中的 MailKit 来读取我的邮件收件箱。我试图让正文只是纯文本,但我不太清楚如何做到这一点。我将分享我迄今为止拥有的代码。
本质上,我需要将该正文文本作为字符串存储在数据库中,但目前我只能获取 HTML 版本。
List<MimeMessage> mimeMessages = new();
ImapClient imapClient = new();
imapClient.Connect(mailSettings.ImapServer, mailSettings.ImapPort, MailKit.Security.SecureSocketOptions.SslOnConnect);
var password = _encryptHelpers.DecryptString(mailSettings.Password);
imapClient.Authenticate(mailSettings.Email, password);
imapClient.Inbox.Open(FolderAccess.ReadOnly);
var uids = imapClient.Inbox.Search(SearchQuery.DeliveredAfter(lastChecked));
var messages = imapClient.Inbox.Fetch(uids, MessageSummaryItems.UniqueId | MessageSummaryItems.Body | MessageSummaryItems.BodyStructure);
foreach (var message in messages)
{
var mailMessage = imapClient.Inbox.GetMessage(message.UniqueId);
mimeMessages.Add(mailMessage);
}
imapClient.Disconnect(true);
return mimeMessages;
我很确定你可以使用
foreach (var message in messages) {
// IMessageSummary.TextBody is a convenience property that finds the 'text/plain' body part for us
var bodyPart = message.TextBody;
// download the 'text/plain' body part
var body = (TextPart)imapClient.Inbox.GetBodyPart(message.UniqueId, bodyPart);
// TextPart.Text is a convenience property that decodes the content and converts the result to a string for us
var text = body.Text;
}
此示例取自 http://www.mimekit.net/docs/html/P_MailKit_MessageSummary_TextBody.htm
我知道我有点晚了,但我遇到了同样的问题,也许我可以提供帮助。
@Marco 的答案也适合我,但前提是邮件正文是“纯文本”。
如果邮件正文是 HTML,则 message.TextBody 为 NULL,但检查 message.HtmlBody 是否不为 NULL 并以相同的方式处理它非常容易。
所以你可以这样做:
if (message.TextBody != null)
{
plain = (TextPart)imapClient.Inbox.GetBodyPart(message.UniqueId, message.TextBody);
body = plain.Text;
}
else if (message.HtmlBody != null)
{
plain = (TextPart)imapClient.Inbox.GetBodyPart(message.UniqueId, message.HtmlBody);
body = plain.Text;
}