【问题标题】:Missing Carriage Return in Downloaded Email Attachment ImapX下载的电子邮件附件 ImapX 中缺少回车符
【发布时间】:2014-04-04 20:14:53
【问题描述】:

这是我的代码:

#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”,所有回车都从文件中删除了

你能帮忙吗?谢谢,

【问题讨论】:

  • CRLF 缺失问题已经修复,您可以从repository 下载最新代码。正文中* 2 FETCH (等垃圾数据问题已知,即将更新。
  • @PavelAzanov,我正在使用 2013 年 12 月 16 日上传的库,但它仍然无法正常工作(我尝试添加源、dll 和 NuGet)。我的代码有问题吗?泰。
  • 下载部分的二进制文件,以及 Nuget 包有旧版本。要获取最新代码,请使用此链接:imapx.codeplex.com/SourceControl/latest。我对您的问题进行了更多更新,但它应该可以正常工作。但是,Internet 消息格式有一些限制,几乎不可能为 7 位/8 位纯文本消息部分恢复正确的换行符。
  • 仅用于正文吗?我使用了您发送的最新链接,但它仍然不适用于附件。顺便说一句,我不确定这是否有帮助:codeproject.com/Articles/17201/…
  • 不仅适用于正文,也适用于7/8位纯文本附件。你能告诉我你要下载的原始文件吗?只需将其发送至 p13a92@googlemail.com

标签: vb.net email email-attachments imapx


【解决方案1】:

我的猜测是 CRLF(Carriage Return Line Feeds)不是您正在查看的下载内容所寻找的格式。我会使用 NotePad++ 之类的工具查看您的附件,并确保您显示的是回车。如果您看到的只是cr,并且您正在寻找crlf 的文件中查看文件,那么它们将被忽略。

要查看的另一件事是您的 .download 调用使​​用的默认编码是什么,以及原始附件的编码是什么。

【讨论】:

  • TY。在常规 IMAP 客户端(如 Outlook)中,Notepad++(所有符号都打开)显示回车符,但在使用 IMAPX 库时则不显示。有没有办法改变编码?
猜你喜欢
  • 1970-01-01
  • 2012-01-03
  • 2013-12-19
  • 2012-09-18
  • 1970-01-01
  • 2014-05-25
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多