使用德语变音符号和名称中的逗号时显示错误的电子邮件接收器

Posted

技术标签:

【中文标题】使用德语变音符号和名称中的逗号时显示错误的电子邮件接收器【英文标题】:Erroneous email receiver display when using German umlauts and a comma in name 【发布时间】:2012-01-28 09:28:37 【问题描述】:

在 .NET 4 中使用 MailMessage class,我今天发现了一个到目前为止我无法解决的问题。请看以下代码:

using (var message = new MailMessage())

    message.From = new MailAddress(@"uwe.keim@gmail.com", "Uwe Keim");
    message.Bcc.Add(new MailAddress(@"uk@zeta-software.de", "Uwe Keim"));

    // This fails (see screenshot).
    /*1*/ message.To.Add(new MailAddress(@"uk2@zeta-sw.net", "Müller, Fred"));

    // This succeeds.
    /*2*/ message.To.Add(new MailAddress(@"uk2@zeta-sw.net", "Fred Müller"));

    // This also succeeds.
    /*3*/ message.To.Add(new MailAddress(@"uk2@zeta-sw.net", "Muller, Fred"));

    message.Subject = "Test";
    message.Body = "Some text body.";

    new SmtpClient().Send(message);

这是一个简单的 sn-p 所以发送一个 SMTP 消息。相互尝试/*1*//*2*//*3*/ 行,行为不同:

只要接收者(“To”)名称包含德语变音符号(即“Ä”、“Ö”或“Ü”)逗号(即“,”),收件人在收到的电子邮件中看到损坏的文本

正如您在上面的屏幕截图(取自 Outlook 2010)中所见,“To:”行中有一个神秘的“=?utf-8?Q?M=C3=BCller”。

省略逗号或删除德语变音符号可以解决此问题。我已经尝试过 Exchange 2003 和 hmailserver 以获得相同的结果。

我的问题是:

有人知道这种行为并有解决办法吗?

更新 1:

根据用户 Adam Maras 的建议,我在发送电子邮件时启动了 Microsoft Network Monitor。

在我看来,MailMessage 类(或 SmtpClient 类?)似乎已经做错了:

【问题讨论】:

您能否转储并查看实际的邮件消息,无论是发送还是接收,对于两种显示名称格式,以查找差异? @AdamMaras 对于接收方,我已经这样做了,但它错误的。对于发送部分,我该怎么做?在邮件服务器中跟踪从我的应用程序收到的内容? 那个,或者使用 Fiddler 之类的东西来查看应用程序写入连接的内容。 【参考方案1】:

所以,经过一番挖掘,我发现了 Microsoft 支持文章 2576045:FIX: Email client does not support a name in a delivery address field that is encoded by the MailMessage class in the .NET Framework 4 if the name contains a non-ASCII character。

看起来,当写出包含 Unicode 字符的地址时,MailMessage 类未正确编码某些内容。根据知识库文章的信息,我当然不能告诉你它是什么,但不管它是什么,都足以让下游读者在标题上哽咽。

【讨论】:

谢谢,Adam,我刚刚用 Microsoft Network Monitor 的结果更新了我的问题。 是的,这似乎与知识库文章(以及我所读到的关于人们使用它的所有经验)的内容一致,所以我建议尝试使用此修补程序。 Hotfix 在我的客户端上运行良好,现在在服务器上试用。非常感谢,亚当! 没问题,朋友。 :) 尽管我们都被教导说,当我们遇到问题时,几乎从来都不是平台的错……有时平台实际上是有问题的(尽管这种情况很少见)。 也在服务器上工作过。我很高兴:-)【参考方案2】:

电子邮件标头必须是 us-ascii(7 位),使用变音符号需要按照 rfc2047 中的说明进行编码。对字符串进行编码有不同的方法,看起来 Outlook 或您的邮件服务器无法理解 utf8 编码。

您可以尝试使用 iso-8859-1 自己对地址进行 mime 编码。

编辑:我刚刚查看了http://msdn.microsoft.com/en-us/library/system.net.mail.mailaddress.aspx的文档

您是否尝试过使用 MailAddress(String, String, Encoding) ?

【讨论】:

谢谢,巴斯蒂安,不幸的是这没有帮助。不过,感谢您的提示!【参考方案3】:

我们实际上也有类似的问题。主要是主题。 MailMergeLib 是朝着正确方向迈出的一步:

http://www.codeproject.com/KB/IP/MailMergeLib.aspx

您可以尝试一下,但它并没有解决我们所有的问题。现在我们切换到 Aspose.Email。它更好但仍然不完美,我们仍然有乱码的主题,但现在只在 Mac 和 iPhone 上,但他们正在修复错误。

http://www.aspose.com/categories/.net-components/aspose.email-for-.net/default.aspx

您可以免费试用。网上还有其他邮件库。http://www.chilkatsoft.com/products.asp

如果你想出更多的东西会很感兴趣。

【讨论】:

以上是关于使用德语变音符号和名称中的逗号时显示错误的电子邮件接收器的主要内容,如果未能解决你的问题,请参考以下文章

美国布局的变音符号和其他符号的替代键盘映射

带有变音符号的 xcodebuild 目标名称

debezium 服务器中的德语变音符号

PDF中的德语变音符号

带有德语变音符号的 NSJSONSerialization 异常

使用 MariaDB 在 JSON_CONTAINS() 中未考虑德语变音符号