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

时间:2017-09-06 07:22:27

标签: .net amazon-web-services email amazon-ses punycode

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

  

ęxąmplę@źćż.com

对于域名部分,我读到有关Punycode的内容,并且工作正常。但是对于地址的本地部分,我似乎无法找到解决方案:我尝试使用RFC 2047编码进行整个电子邮件,但随后SES返回'缺少最终@ domain'错误,所以我试图只编码本地部分,因此电子邮件将是

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

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

1 个答案:

答案 0 :(得分:4)

所以这就是我发现的:

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

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

目前the .Net SDK documentation中有关MIME编码的以下评论似乎有些red herring

  

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

由于我与亚马逊聊过这个问题,他们似乎正在纠正文档的某些部分,因此可以在API documentation中找到更好的描述。

  

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