Используя MailMessage
class в .NET 4, сегодня я нашел проблему, которую я пока не могу решить. См. Следующий код:Ошибочный дисплей приемника электронной почты при использовании немецких умляутов и запятая в имени
using (var message = new MailMessage())
{
message.From = new MailAddress(@"[email protected]", "Uwe Keim");
message.Bcc.Add(new MailAddress(@"[email protected]", "Uwe Keim"));
// This fails (see screenshot).
/*1*/ message.To.Add(new MailAddress(@"[email protected]", "Müller, Fred"));
// This succeeds.
/*2*/ message.To.Add(new MailAddress(@"[email protected]", "Fred Müller"));
// This also succeeds.
/*3*/ message.To.Add(new MailAddress(@"[email protected]", "Muller, Fred"));
message.Subject = "Test";
message.Body = "Some text body.";
new SmtpClient().Send(message);
}
Это простой фрагмент, поэтому отправьте сообщение SMTP. Взаимно пытается линии /*1*/
, /*2*/
и /*3*/
поведение отличается:
Всякий раз, когда приемник («To») имя содержит немецкий умляут (т.е. «А», «Ö» или «U») и запятой (т.е.»,„), приемника видит поврежденный текст в сообщении электронной почты, он получает:
Как вы можете видеть на скриншоте выше (взято из Outlook 2010), есть зашифрованный“ =? utf-8? Q? M = C3 = BCller "в строке" To: ".
Оставив запятую или удалив немецкий umlaut, это исправление. Я попытался как Exchange 2003, так и hmailserver получить тот же результат.
Мой вопрос:
ли кто-нибудь знает о таком поведении и имеет решение к нему?
Update 1:
Как предложено пользователем Adam Maras, я запустил Microsoft Network Monitor при отправке сообщения электронной почты.
Мне кажется, что MailMessage
класс (или SmtpClient
класс?) Уже делает это неправильно:
Можете ли вы сбросить и посмотреть фактическое почтовое сообщение, поскольку оно отправлено и как оно получено, для обоих форматов имен, чтобы искать различия? –
@AdamMaras Для получателя я уже сделал это, и это не так. Для отправляющей части, как я могу это сделать? Отслеживание на почтовом сервере того, что получено от моего приложения? –
Это, или используя что-то вроде Fiddler, чтобы увидеть, что приложение пишет в соединение. –