Отсутствует возврат каретки в загруженном вложении электронной почты ImapX

Вот мой код:

#Region "Imports"
Imports System.Text.RegularExpressions
Imports System.Text
Imports Microsoft.VisualBasic.CallType
Imports ImapX
Imports System.Runtime.CompilerServices
Imports System.Security.Authentication
Imports System.IO
Imports ml = System.Net.Mail
Imports System.Net
Imports ImapX.Enums
Imports ImapX.Constants
Imports System.Security.Authentication.SslProtocols
#End Region

Module Module1
Sub Main()
    Dim _messages As List(Of ImapX.Message)

    Using MyImapClient = New ImapX.ImapClient
        With MyImapClient
            .Host = ImapServer  
            .Port = Port    
            .SslProtocol = Ssl3 Or Tls
            .ValidateServerCertificate = True

            .Credentials = New ImapX.Authentication.PlainCredentials(UserName, Password)
            Dim IsConnected As Boolean = .Connect
            .Login()
            .Behavior.AutoDownloadBodyOnAccess = False
            .Behavior.AutoPopulateFolderMessages = False
            .Behavior.MessageFetchMode = MessageFetchMode.Full
            .Behavior.ExamineFolders = False
            .Behavior.RequestedHeaders = {MessageHeader.From, MessageHeader.[Date], MessageHeader.Subject, MessageHeader.ContentType, MessageHeader.Importance}
            'Dim IsInboxSelected As Boolean = .SelectFolder(.Folders.Inbox.Name)
            'Dim IsInboxSelected As Boolean = .Folders(.Folders.Inbox.Name).[Select]()
        End With

        Dim MyFolder As Folder = MyImapClient.Folders.Inbox            
        _messages = MyFolder.Search().OrderBy(Function(n) n.[Date]).ToList()
        _messages.ForEach(Sub(n) n.Download(MessageFetchMode.Full))         
        _messages.ForEach(Sub(n) n.Download(MessageFetchMode.Full))         
     End Using

    Dim MyAttachment As ImapX.Attachment = _messages.First.Attachments.First
    MyAttachment.Download()

    Dim FolderPath As String = "C:\Users\AAA\Downloads\"
    Dim LocalFileName As String = "1212.txt"
    MyAttachment.Save(FolderPath, LocalFileName)

End Sub

End Module

Код работает без проблем — он подключается к серверу imap, загружает первое вложение первого письма, которое оказывается файлом .txt, поэтому я сохраняю его как таковое.

Проблема в том, что к содержимому файла добавляется " * 2 FETCH (" и за ним следует " UID 45", и все символы возврата каретки удаляются из файла.

Не могли бы вы помочь? Спасибо,


person as9876    schedule 04.04.2014    source источник
comment
Проблема с отсутствующими CRLF уже исправлена, вы можете скачать последний код из репозитория. Проблема с мусорными данными, такими как * 2 FETCH ( в теле, известна, скоро будет обновление.   -  person Pavel Azanov    schedule 06.04.2014
comment
@PavelAzanov, я использую библиотеку, загруженную 16 декабря 2013 г., и она все еще не работает (я пытался добавить исходный код, dll и NuGet). Что-то не так с моим кодом? ТЫ.   -  person as9876    schedule 08.04.2014
comment
Бинарные файлы в разделе загрузки, а также пакет Nuget имеют старую версию. Чтобы получить последнюю версию кода, воспользуйтесь этой ссылкой: imapx.codeplex.com/SourceControl/latest . Я сделал больше обновлений по вашей проблеме, не должно работать нормально. Однако формат интернет-сообщений имеет некоторые ограничения, которые делают почти невозможным восстановление правильных разрывов строк для 7-битных/8-битных частей обычного текстового сообщения.   -  person Pavel Azanov    schedule 13.04.2014
comment
Это только для основного текста? Я использовал последнюю ссылку, которую вы прислали, и она все еще не работает для вложений. Кстати, я не уверен, что это поможет: codeproject.com/Articles/17201/   -  person as9876    schedule 18.04.2014
comment
Это не только для основного текста, но и для 7/8-битных простых текстовых вложений. Можете ли вы показать мне исходный файл, который вы пытаетесь загрузить? Просто отправьте его на адрес [email protected].   -  person Pavel Azanov    schedule 21.04.2014
comment
Спасибо за сообщение! Я проверил это и ответил на вашу почту. Используя последний код из репозитория (imapx.codeplex.com/SourceControl/latest), я в загруженном файле нет пропущенных CRLF, все работает нормально.   -  person Pavel Azanov    schedule 26.04.2014


Ответы (1)


Я предполагаю, что CRLF (возврат каретки) не тот формат, в котором вы просматриваете загрузку. Я бы посмотрел на ваше вложение, используя что-то вроде NotePad ++, и убедился, что вы показываете возврат каретки. Если все, что вы видите, это cr, и вы просматриваете файл в чем-то в поисках crlf, то они будут проигнорированы.

Еще одна вещь, на которую следует обратить внимание, это то, какую кодировку по умолчанию использует ваш вызов .download и в какой кодировке находится исходное вложение.

person thetimmer    schedule 04.04.2014
comment
ТЫ. В обычном клиенте IMAP, таком как Outlook, Notepad ++ (со всеми символами) показывает возврат каретки, но при использовании библиотеки IMAPX этого не происходит. Есть ли способ изменить кодировку? - person as9876; 05.04.2014