MailKit - 获取电子邮件正文作为文本,不包括链

问题描述 投票:0回答:2

我正在使用 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;
c# .net mailkit
2个回答
0
投票

我很确定你可以使用

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


0
投票

我知道我有点晚了,但我遇到了同样的问题,也许我可以提供帮助。

@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;
}
© www.soinside.com 2019 - 2024. All rights reserved.