我正在使用 .NETSmtpClient
发送主题可能包含 ASCII 范围之外的字符的电子邮件。RFC 2047定义了电子邮件文本在包含特殊字符时应如何编码。以下是电子邮件标题中的主题示例:
Subject: Votre enregistrement numéro 123
在编码为 ISO-8859-1 之后,这应该变成:
Subject: =?iso-8859-1?Q?Votre=20enregistrement=20num=E9ro=20123?=
其中所有特殊字符,包括?
, =
(和其他字符)和空格,都使用=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?=