Проблема кодировки тела вложения MimeKit - PullRequest
0 голосов
/ 05 марта 2019

Мне нужно получить все письма в почтовом ящике.И мне нужно прочитать тела вложения, чтобы получить информацию.Но у меня есть проблема с кодировкой, и я не могу решить эту проблему.

Пример кода:

            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();
                        }
                    }
                }
            }

Заголовок вложения:

Содержание-Тип: текст / обычный; charset = "utf-8"

Кодирование передачи содержимого: цитируемое-печатное


Проблема кодирования в теле приложения

Тема: Били = C5 = 9Fim A. = C5 = 9E.

1 Ответ

0 голосов
/ 05 марта 2019

Ваш цикл 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);
}
...