Заголовок почты «От» иногда не кодируется с помощью System.Net.Mail и .NET Framework 2.0 - PullRequest
1 голос
/ 03 августа 2010

Привет.

Я проверил некоторые другие записи вопросов здесь, такие как эта , но не нашел ту же проблему, что и у меня. Возможно, гуру здесь испытывал нечто подобное в прошлом.

По сути, я создаю веб-приложение ASP.NET 2.0, которому иногда требуется отправлять электронную почту (используя System.Net.Mail), и я сталкиваюсь со странным и противоречивым поведением.

  1. Для всех сообщений электронной почты, которые он отправляет вне, он использует тот же адрес электронной почты адрес, отображаемое имя и кодировка (Encoding.UTF8) в поле «От» заголовок (для которого MailAddress объект создан). Отображаемое имя всегда одно слово, которое содержит не ASCII символ.
  2. Каждый тип сообщения имеет свой метод генерации MailAddress и MailAddressCollection объектов прежде чем они вызовут общий метод с аргументами, такими как от, до, предмет, тело (которое в свою очередь на самом деле передает сообщение, используя MailMessage объект и SmtpClient объект).
  3. Большинство типов сообщений генерируются правильно, с base64 и utf-8 закодированные заголовки (включая «От»).
  4. Однако для одного конкретного типа сообщения все поля кроме закодированы "От" должным образом. В этих сообщениях Из отображаемого имени поля не закодированы вообще, вызывая не-ASCII символ для отображения как странный символ и почта шлюзы ворчат о плохом кодирование.

Вот пример правильно закодированного поля From:

От: =? Utf-8? B? QnJ1a2Vyc8O4a25hZA ==? =

Вот пример поля From, не закодированного вообще:

От: "Brukers knad"

Кстати, не-ASCII символ должен быть "& oslash;".

Вот строка кода, создающая объект MailAddress для From (для типа сообщения, который не может кодировать это поле:

mailSender = new MailAddress(Settings.SettingFromDB.Email_SenderAddress,
    Settings.SettingFromDB.Email_SenderName, Encoding.UTF8);

Аналогично, вот строка кода (для сообщения того же типа), создающая объект MailAddress для To (единственное различие заключается в том, что он использует MailAddressCollection):

mailTo = new MailAddressCollection();
mailTo.Add(new MailAddress(objSøknad.Creator.Email, objSøknad.Creator.FullName,
    Encoding.UTF8));

И, наконец, что не менее важно, вот строка, создающая объект MailAddress для From для типа сообщения, в котором все поля всегда кодируются должным образом ( совпадает с приведенным выше!):

mailSender = new MailAddress(Settings.SettingFromDB.Email_SenderAddress,
    Settings.SettingFromDB.Email_SenderName, Encoding.UTF8);


Тема всегда кодируется одинаково (Encoding.UTF8), а метод, генерирующий объект MailMessage и кодирующий тело, всегда один и тот же (общий метод, вызываемый для всех сообщений). И заголовки, которые кодируются правильно, всегда кодируются в base64 во всех сообщениях (не для печати в кавычках).

1 Ответ

1 голос
/ 29 декабря 2010

Создайте папку и с помощью кода отправьте сообщение в эту папку. Затем дважды щелкните по нему, чтобы отобразить сообщение в Outlook. В старых версиях Outlook может отображаться элемент некорректно, однако в Outlook 2010 это возможно. Это смешанный пакет, поскольку в каждой версии Outlook включены поля, поддерживающие Юникод - в этой области произошел прогресс. Вы также можете использовать почту Windows Live для просмотра сообщения, чтобы узнать, можете ли вы воспроизвести проблему. Кроме того, вы можете использовать .NET с кодом CDOSYS для сокращения MIME и отображения результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...