Привет.
Я проверил некоторые другие записи вопросов здесь, такие как эта , но не нашел ту же проблему, что и у меня. Возможно, гуру здесь испытывал нечто подобное в прошлом.
По сути, я создаю веб-приложение ASP.NET 2.0, которому иногда требуется отправлять электронную почту (используя System.Net.Mail), и я сталкиваюсь со странным и противоречивым поведением.
- Для всех сообщений электронной почты, которые он отправляет
вне, он использует тот же адрес электронной почты
адрес, отображаемое имя и кодировка
(
Encoding.UTF8
) в поле «От»
заголовок (для которого MailAddress
объект создан). Отображаемое имя
всегда одно слово, которое содержит
не ASCII символ.
- Каждый тип сообщения имеет свой
метод генерации
MailAddress
и
MailAddressCollection
объектов
прежде чем они вызовут общий метод
с аргументами, такими как от, до,
предмет, тело (которое в свою очередь
на самом деле передает сообщение, используя
MailMessage
объект и
SmtpClient
объект).
- Большинство типов сообщений генерируются
правильно, с base64 и utf-8
закодированные заголовки (включая «От»).
- Однако для одного конкретного типа сообщения все
поля кроме закодированы "От"
должным образом. В этих сообщениях
Из отображаемого имени поля не
закодированы вообще, вызывая
не-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 во всех сообщениях (не для печати в кавычках).