Отображение ошибочного адреса электронной почты при использовании умлаутов и запятой в имени - PullRequest
8 голосов
/ 27 декабря 2011

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

enter image description here

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

Устранение неполадок с помощью запятой или удаления немецкого умлаута.Я пробовал и Exchange 2003, и hmailserver получить один и тот же результат.

Мой вопрос:

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

Обновление 1:

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

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

enter image description here

Ответы [ 3 ]

4 голосов
/ 27 декабря 2011

Итак, после некоторого поиска я наткнулся на статью поддержки Microsoft 2576045: ИСПРАВЛЕНИЕ: Почтовый клиент не поддерживает имя в поле адреса доставки, которое кодируется классом MailMessage в .NET Framework 4, если имя содержит не-ASCII символ .

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

2 голосов
/ 27 декабря 2011

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

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

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

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

0 голосов
/ 27 декабря 2011

У нас на самом деле были похожие проблемы.В основном с темой, хотя.Одним шагом в правильном направлении был 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

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

...