16

我正在尝试使用适用于 .NET 和 SES 的 Amazon SDK 发送电子邮件。我有一封包含特殊字母的电子邮件,例如:

ęxąmplę@źćż.com

对于域部分,我阅读了有关 Punycode 的信息,并且效果很好。但是对于地址的本地部分,我似乎找不到解决方案:我尝试对整个电子邮件使用RFC 2047编码,但随后 SES 返回 'missing final @ domain' 错误,所以我尝试只编码一个本地部分,所以电子邮件将是

=?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=@punycodeemail.com

但这似乎也不起作用。有人成功解决了吗?

4

1 回答 1

7

所以这是我发现的:

基本SMTP电子邮件地址规范(RFC 5322 第 3.4 节)不允许电子邮件地址超出7 位 ASCII范围的有限子集。为了支持问题中的电子邮件地址,发送和接收电子邮件服务器都需要支持RFC 6531中定义的称为SMTPUTF8的 SMTP 扩展。

根据我与 Amazon SES 支持团队的对话,目前(2017 年 11 月 23 日)并没有广泛支持SMTPUTF8,因此他们也不支持它。他们的开发团队正在研究它,但是他们不知道它何时甚至是否会投入生产。

当前在.Net SDK 文档中关于 MIME 编码的以下评论似乎有点牵强附会

默认情况下,字符串必须是 7 位 ASCII。如果文本必须包含任何其他字符,则必须使用 MIME 编码字语法 ( RFC 2047 ) 而不是文字字符串。MIME 编码字语法使用以下形式:=?charset?encoding?encoded-text?=。有关详细信息,请参阅RFC 2047

由于我与 Amazon 讨论过这个问题,他们似乎正在更正文档的某些部分,可以在API 文档中找到更好的描述。

Amazon SES 不支持 SMTPUTF8 扩展,如 RFC6531中所述。因此,目标电子邮件地址的本地部分(@ 符号之前的电子邮件地址部分)只能包含 7 位 ASCII 字符。如果地址的域部分(@ 符号之后的部分)包含非 ASCII 字符,则必须使用 Punycode 对它们进行编码,如RFC3492中所述。

于 2017-11-23T12:34:06.690 回答