我正在尝试使用下面的代码检索电子邮件附件并将其保存到文件系统中的特定目录。
Dim objMail As Message = New Message(Encoding.ASCII.GetBytes(strMessage))
For Each att In objMail.FindAllAttachments()
Dim Stream as FileStream = New FileStream("D:XX" & att.FileName.ToString(),
FileMode.Create)
Dim BinaryStream As New BinaryWriter(Stream)
BinaryStream.Write(BitConverter.ToString(att.Body))
BinaryStream.Close()
Next
我也试过att.GetBodyasText()
使用此代码,我可以将附件文件保存在所需的文件夹中。但是当打开一个文件时,我得到errorL
文件格式不正确或未正确解码。
我是MIME编码/解码新手。
我是OpenPop.NET的开发人员。
用于实例化Message类的代码有多个问题:
- strMessage内容来自哪里?
- 你怎么知道它是用ASCII编码的?
这两个主要问题可能会产生很大的影响。你不应该使用字符串来包含消息,而应该使用原始字节!
例如(c#):
byte[] byteMessage = someFileStream.ReadToEnd();
Message message = new Message(byteMessage);
这样,您就不会因为在字节上使用错误的编码而破坏消息。通常,电子邮件将包含一个头,告诉如何解码到字节到字符串,这就是OpenPop Message类将为您做的。
现在让我解释一下附件。附件通常是原始字节,例如PNG图片是PNG图片阅读器能够理解的一些字节。为了让PNG图片阅读器理解图片,附件的原始字节必须保存到一个文件中。您可以使用att.Body获取原始字节。
也有原始字节没有意义的附件-例如,用BASE64编码的文本附件对文本阅读器程序不是很有用,并且这样的附件必须在保存之前转换为文本。您可以使用att.GetBodyAsText()获取文本。
你正在做的是采取附件的原始字节,然后使用BitConverter将其转换成十六进制数字-我不能做出任何意义。相反,您应该更改您的:
BinaryStream.Write(BitConverter.ToString(att.Body))
BinaryStream.Write(att.Body)
如果你的附件是一个图片或一些更复杂的文件。
我希望这能帮助你解决问题。