Я использую .NET SmtpClient
для отправки электронной почты, где тема может содержать символы вне диапазона ASCII. RFC 2047 определяет способ кодирования текста электронной почты, если он содержит специальные символы. Вот пример темы в заголовке письма:
Subject: Votre enregistrement numéro 123
Это должно стать после кодирования по ISO-8859-1:
Subject: =?iso-8859-1?Q?Votre=20enregistrement=20num=E9ro=20123?=
где все специальные символы, включая ?
, =
(и другие) и пробелы, кодируются с помощью escape-последовательности =xx
.
Однако, когда я смотрю на то, что производит SmtpClient
, я обнаруживаю, что оно не выходит за пробелы, что означает, что почтовый клиент получает этот заголовок:
Subject: =?iso-8859-1?Q?Votre enregistrement num=E9ro 123?=
означает, что кодировка нарушена по отношению к (мое прочтение) RFC 2047. Некоторые почтовые клиенты совершенно довольны этой неправильной кодировкой (большинство из них, на самом деле, включая Outlook и gmail), но одной (wanadoo .fr) отображает заголовок в необработанном формате. Это не то, что пользователь должен увидеть: - (
Есть ли какой-нибудь известный способ решения этой проблемы?
Примечание: .NET 4.0 реализация SmtpClient
кодирует субъект, как и ожидалось, получая этот вывод, который является правильным:
Subject: =?Windows-1252?Q?Votre_enregistrement_num=E9ro_123?=