Используя класс MailMessage
в .NET 4, я сегодня обнаружил проблему, которую не могу решить до сих пор. Пожалуйста, посмотрите следующий код:
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);
}
Это простой фрагмент для отправки 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
?) уже делает это неправильно: