Я использую .NET SmtpClient
для отправки электронной почты, где объект может содержать символы вне диапазона ASCII. RFC 2047 определяет, как текст электронной почты должен быть закодирован, когда он содержит специальные символы. Ниже приведен пример субъекту в заголовке электронной почты:SmtpClient (.NET) не кодирует почтовый заголовок в соответствии с RFC 2047
Subject: Votre enregistrement numéro 123
Это должно стать, после кодирования в ISO-8859-1:
Subject: =?iso-8859-1?Q?Votre=20enregistrement=20num=E9ro=20123?=
где все специальные символы, включая ?
, =
(и другие) и wh ite space, кодируются с помощью 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?=
у меня нет для вас решение, но я подтвердит вашу интерпретацию RFC 2047, в частности раздел 4.2 (3): «В частности, SPACE и TAB НЕ ДОЛЖНЫ быть представлены как сами в закодированных словах». (Обратите внимание, что вместо = 20 вы также можете использовать символ подчеркивания) – Joe
+1 для большой проблемы/поднятой проблемы, и что вы на самом деле ссылаетесь на соответствующий RFC, вы сделали домашнее задание и все еще имеете проблему для разрешения – curtisk
. или вы разрешаете SmtpClient работать по умолчанию? – Timores