Skip to main content
 首页 » 编程设计

c#之OpenPop.NET之修改电子邮件中的字符

2024年01月01日43oomusou

我正在使用 OpenPop 库来阅读电子邮件。我遇到的问题是,在阅读电子邮件正文时,库修改了一个字符。 请参阅以下示例:

邮件正文:

Diseño

C# 代码:

OpenPop.Pop3.Pop3Client objPOP3 = new OpenPop.Pop3.Pop3Client(); 
OpenPop.Mime.Message message = default(OpenPop.Mime.Message); 
OpenPop.Mime.MessagePart plainTextPart = default(OpenPop.Mime.MessagePart); 
string bodyMailTxt = ""; 
 
objPOP3.Connect(Host, Port, UseSSL); 
objPOP3.Authenticate(User, Password); 
 
message = objPOP3.GetMessage(1); 
plainTextPart = message.FindFirstPlainTextVersion(); 
bodyMailTxt = plainTextPart.GetBodyAsText(); 

代码 vb:

Dim objPOP3 As New OpenPop.Pop3.Pop3Client 
Dim message As OpenPop.Mime.Message 
Dim plainTextPart As OpenPop.Mime.MessagePart 
Dim bodyMailTxt As String = "" 
 
ObjPOP3.Connect(Host, Port, UseSSL) 
ObjPOP3.Authenticate(User, Password) 
 
message = objPOP3.GetMessage(1) 
plainTextPart = message.FindFirstPlainTextVersion() 
bodyMailTxt = plainTextPart.GetBodyAsText() 


bodyMailTxt 值为“Diseãf±o”,它用 f(拉丁文小写字母 F)替换了 ƒ(带钩的拉丁文小写字母 F) .
我必须做些什么才能避免这种情况发生?

请您参考如下方法:

通过查看 OpenPop.Mime.MessagePart 类的源代码,它看起来像 plainTextPart.GetBodyAsText(),正在获取这样的文本,返回 BodyEncoding.GetString(Body),其中 BodyEncoding 是 Encoding 类型的公共(public)属性,Body 是包含消息的原始字节数组。

我不知道,也无法真正测试,但可能是消息用于解码文本的默认编码与用于发送文本的编码不同。您可以通过尝试 plainTextPart.Encoding = Encoding.ASCII 或 plainTextPart.Encoding = Encoding.UTF8 或 plainTextPart.Encoding 查看得到的结果= Encoding.Unicode 在调用 .GetBodyAsText() 方法之前。

MessagePart 源文件链接:

http://hpop.svn.sourceforge.net/viewvc/hpop/trunk/OpenPop/Mime/MessagePart.cs?revision=377&view=markup