如何从 pop3 读取 UTF-8 邮件附件
How to read UTF-8 mail attachments from pop3
电子邮件包含 XML 个 UTF-8 编码的文件附件。
我正在寻找一种从 ASP.NET/Mono MVC4 应用程序中读取此 attahcmed 的方法。
我尝试使用代码
How to save email attachment using OpenPop 中描述的方式使用 openpop
using (OpenPop.Pop3.Pop3Client client = new Pop3Client())
{
client.Connect("mail.company.com", 110, false);
client.Authenticate("user", "pass", AuthenticationMethod.UsernameAndPassword);
if (client.Connected)
{
int messageCount = client.GetMessageCount();
List<Message> allMessages = new List<Message>(messageCount);
for (int i = messageCount; i > 0; i--)
{
var msg = client.GetMessage(i);
var att = msg.FindAllAttachments();
foreach (var ado in att)
{
var xml = ado.GetBodyAsText();
结果 xml 字符串重音字符被转换为 tow ??分数。
下面消息中的 XXXLTEC O=C3=9C
在 xml 变量中显示为 XXXLTEC O??
。
正确的结果是 XXXLTEC OÜ
如何正确读取UTF-8附件?
我还没有在 OpenPop 中找到任何选项来正确转换它。
XML 邮件中的附件显示为
------=_NextPart_000_0066_01D0302C.83D6EFA0
Content-Type: text/xml;
name="tapitolemas.xml"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
filename="tapitolemas.xml"
<?xml version=3D"1.0" encoding=3D"UTF-8"?>
<E-Document>
<Header>
<DateIssued>2015-01-02T13:27</DateIssued>
<SenderID>-</SenderID>
<ReceiverID>1COL</ReceiverID>
</Header>
<Document>
<DocumentType>invoice</DocumentType>
<DocumentFunction>original</DocumentFunction>
<DocumentParties>
<BuyerParty context=3D"partner">
<PartyCode>1COL</PartyCode>
<Name>XXXLTEC O=C3=9C</Name>
使用 OpenPOP.NET 可能无法解决此问题,因此要使其正常工作,您唯一真正的选择是使用另一个 POP3 库,例如没有此问题的 MailKit。
问题是 OpenPOP 假设字符集是 US-ASCII,因为 Content-Type header 中没有字符集参数,它错误地强制文本使用该字符集编码进行转换(而不是在它接受的东西上变得自由。
另一方面,MailKit 使用字符集回退逻辑来尝试确定它是哪个字符集。但即使它默认出错(即 TextPart.Text
属性,你仍然可以使用 TextPart.GetText (System.Text.Encoding encoding)
来覆盖东西)。
这可以通过将 MessagePrt.cs GetBodyAsText() 方法更改为
来解决
public string GetBodyAsText()
{
return Encoding.UTF8.GetString(Body);
// Original gets ?? characters instead of unicode ones
//return BodyEncoding.GetString(Body);
}
电子邮件包含 XML 个 UTF-8 编码的文件附件。 我正在寻找一种从 ASP.NET/Mono MVC4 应用程序中读取此 attahcmed 的方法。 我尝试使用代码
How to save email attachment using OpenPop 中描述的方式使用 openpopusing (OpenPop.Pop3.Pop3Client client = new Pop3Client())
{
client.Connect("mail.company.com", 110, false);
client.Authenticate("user", "pass", AuthenticationMethod.UsernameAndPassword);
if (client.Connected)
{
int messageCount = client.GetMessageCount();
List<Message> allMessages = new List<Message>(messageCount);
for (int i = messageCount; i > 0; i--)
{
var msg = client.GetMessage(i);
var att = msg.FindAllAttachments();
foreach (var ado in att)
{
var xml = ado.GetBodyAsText();
结果 xml 字符串重音字符被转换为 tow ??分数。
下面消息中的 XXXLTEC O=C3=9C
在 xml 变量中显示为 XXXLTEC O??
。
正确的结果是 XXXLTEC OÜ
如何正确读取UTF-8附件? 我还没有在 OpenPop 中找到任何选项来正确转换它。
XML 邮件中的附件显示为
------=_NextPart_000_0066_01D0302C.83D6EFA0
Content-Type: text/xml;
name="tapitolemas.xml"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
filename="tapitolemas.xml"
<?xml version=3D"1.0" encoding=3D"UTF-8"?>
<E-Document>
<Header>
<DateIssued>2015-01-02T13:27</DateIssued>
<SenderID>-</SenderID>
<ReceiverID>1COL</ReceiverID>
</Header>
<Document>
<DocumentType>invoice</DocumentType>
<DocumentFunction>original</DocumentFunction>
<DocumentParties>
<BuyerParty context=3D"partner">
<PartyCode>1COL</PartyCode>
<Name>XXXLTEC O=C3=9C</Name>
使用 OpenPOP.NET 可能无法解决此问题,因此要使其正常工作,您唯一真正的选择是使用另一个 POP3 库,例如没有此问题的 MailKit。
问题是 OpenPOP 假设字符集是 US-ASCII,因为 Content-Type header 中没有字符集参数,它错误地强制文本使用该字符集编码进行转换(而不是在它接受的东西上变得自由。
另一方面,MailKit 使用字符集回退逻辑来尝试确定它是哪个字符集。但即使它默认出错(即 TextPart.Text
属性,你仍然可以使用 TextPart.GetText (System.Text.Encoding encoding)
来覆盖东西)。
这可以通过将 MessagePrt.cs GetBodyAsText() 方法更改为
来解决 public string GetBodyAsText()
{
return Encoding.UTF8.GetString(Body);
// Original gets ?? characters instead of unicode ones
//return BodyEncoding.GetString(Body);
}