Amazon SES - 电子邮件地址中的非ASCII字符

17

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

ęxąmplę@źćż.com

对于域部分,我了解到Punycode很有效。但是对于地址的本地部分,我似乎找不到解决方案:我试图使用RFC 2047对整个电子邮件进行编码,但然后SES返回“缺少最终@域”错误,因此我尝试仅对本地部分进行编码,以便电子邮件将会是:

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

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


unicode(sender, 'latin-1').encode('utf-8') - Srini V
1个回答

9

以下是我发现的:

基础的SMTP电子邮件地址规范(RFC 5322第3.4节)不允许使用7位ASCII字符集之外的电子邮件地址。为了支持像问题中的那种电子邮件地址,发送和接收电子邮件服务器都需要支持SMTP的一个扩展SMTPUTF8,该扩展在RFC 6531中定义。

根据我与Amazon SES支持团队的交谈,SMTPUTF8目前并未得到广泛支持(截至2017年11月23日),因此他们也不支持它。他们的开发团队正在努力解决这个问题,但是他们不知道什么时候甚至是否会推出它。
当前.Net SDK文档中有关MIME编码的下面评论似乎有些牵强附会。red herring

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

由于我与亚马逊进行了交流,他们似乎正在纠正文档的某些部分,可以在 API文档中找到更好的描述。

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

谢谢你的回答。可惜它还没有得到广泛支持。 - Konrad Mikuła

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接