MimeKit 附件正文编码问题

Posted

技术标签:

【中文标题】MimeKit 附件正文编码问题【英文标题】:MimeKit attachment body encoding issue 【发布时间】:2019-07-27 01:11:22 【问题描述】:

我需要获取邮箱中的所有电子邮件。 我需要阅读附件的正文以获取信息。 但是我有编码问题,无法解决这个问题。

代码示例:

            using (var client = new ImapClient()) 
            
                client.ServerCertificateValidationCallback = (s, c, h, b) => true;
                client.Connect("imap.secureserver.net", 143, SecureSocketOptions.Auto); // godaddy
                client.Authenticate("username", "password");


                client.Inbox.Open(FolderAccess.ReadOnly);
                IList<UniqueId> uids = client.Inbox.Search(SearchQuery.All);

                foreach (UniqueId uid in uids)
                
                    MimeMessage message = client.Inbox.GetMessage(uid);

                    foreach (MimeEntity attachment in message.Attachments)
                    
                        var fileName = "test" + Tools.GenerateRandomString(5);
                        if ((attachment is MessagePart))
                        
                            var attachmentBody = ((MessagePart)attachment).Message.ToStringNullSafe();
                        
                    
                
            

附件标题:

内容类型:text/plain;charset="utf-8"

Content-Transfer-Encoding:quoted-printable


附件正文中的编码问题

主题:Bili=C5=9Fim A.=C5=9E.

【问题讨论】:

【参考方案1】:

您的 foreach 循环似乎不完整,因为 MessagePart 不能代表 text/plain;charset="utf-8" MIME 部分,因此您的代码和结果不匹配。

也就是说,您看到的是内容已编码。您需要对其进行解码:

if (attachment is MimePart) 
    part = (MimePart) attachment;

    using (var stream = File.Create (fileName))
        part.Content.DecodeTo (stream);

【讨论】:

以上是关于MimeKit 附件正文编码问题的主要内容,如果未能解决你的问题,请参考以下文章

Javamail 使用 7BIT 内容传输编码解析电子邮件正文

JavaMail 从字符串发送邮件附件 - 编码 UTF-8

使用 utf-8 文件名发送 MIME 编码的电子邮件附件

导航 MimeKit.MimeParser

带有 MimeKit、C# Winforms 和 Google API 的 Gmail 草稿(带附件的 HTML)

.Net Core 5 web api 使用 mimekit 和 mailkit 的电子邮件附件