2011-12-27 15 views
8

Используя 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») и запятой (т.е.»,„), приемника видит поврежденный текст в сообщении электронной почты, он получает:

enter image description here

Как вы можете видеть на скриншоте выше (взято из Outlook 2010), есть зашифрованный“ =? utf-8? Q? M = C3 = BCller "в строке" To: ".

Оставив запятую или удалив немецкий umlaut, это исправление. Я попытался как Exchange 2003, так и hmailserver получить тот же результат.

Мой вопрос:

ли кто-нибудь знает о таком поведении и имеет решение к нему?

Update 1:

Как предложено пользователем Adam Maras, я запустил Microsoft Network Monitor при отправке сообщения электронной почты.

Мне кажется, что MailMessage класс (или SmtpClient класс?) Уже делает это неправильно:

enter image description here

+1

Можете ли вы сбросить и посмотреть фактическое почтовое сообщение, поскольку оно отправлено и как оно получено, для обоих форматов имен, чтобы искать различия? –

+1

@AdamMaras Для получателя я уже сделал это, и это не так. Для отправляющей части, как я могу это сделать? Отслеживание на почтовом сервере того, что получено от моего приложения? –

+1

Это, или используя что-то вроде Fiddler, чтобы увидеть, что приложение пишет в соединение. –

ответ

4

Итак, после некоторого рытья я столкнулся с статьей поддержки 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.

Похоже, что при выписывании адреса, который содержит символы Юникода, класс MailMessage неправильно кодирует. Я, конечно, не могу рассказать вам, на чем основана информация о KB-статье, но что бы это ни было, достаточно, чтобы читатели нисходящего потока задыхались от заголовков.

+1

Спасибо, Адам, я только что обновил свой вопрос результатами Microsoft Network Monitor. –

+1

Да, это похоже на то, что статья KB (и все, что я читал о опыте людей с ней), поэтому я рекомендую попробовать исправление. –

+1

Исправление работало отлично на моем клиенте, пытаясь теперь на сервере. Большое спасибо, Адам! –

2

электронной почты заголовки должны быть US-ASCII (7-бит) , использование умлаутов требует кодирования, как описано в rfc2047. Существуют разные способы кодирования строк, и он похож на внешний вид, или ваш почтовый сервер не будет понимать кодировку utf8.

Вы можете попробовать mime закодировать адрес самостоятельно, используя iso-8859-1.

редактировать: Я только что проверил документацию на http://msdn.microsoft.com/en-us/library/system.net.mail.mailaddress.aspx

вы пытались использовать MailAddress (String, String, Encoding)?

+1

Спасибо, Бастиан, к сожалению, это не помогло. Спасибо за ваш намек! –

0

У нас были подобные проблемы. В основном с Субъектом. один шаг в правильном направлении был 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

Было бы очень интересно, если вы выясните что-то еще.