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

Uwe*_*eim 8 c# email smtp diacritics mailmessage

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

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);
}
Run Code Online (Sandbox Code Playgroud)

这是一个简单的片段,因此发送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班级?)已经做错了:

在此输入图像描述

Ada*_*ras 4

因此,经过一番挖掘,我发现了 Microsoft 支持文章 2576045:修复:如果名称包含非 ASCII 字符,电子邮件客户端不支持由 .NET Framework 4 中的类编码的传递地址字段中的名称MailMessage

看来,当写出包含 Unicode 字符的地址时,该类MailMessage未正确编码某些内容。我当然无法根据知识库文章的信息告诉你它是什么,但无论它是什么,都足以让下游读者被标题噎住。