Dot-Net

Amazon SES - 電子郵件地址中的非 ASCII 字元

  • December 20, 2018

我正在嘗試使用適用於 .NET 和 SES 的 Amazon SDK 發送電子郵件。我有一封包含特殊字母的電子郵件,例如:

ęxąmplę@źćż.com

對於域部分,我閱讀了有關 Punycode 的資訊,並且效果很好。但是對於地址的本地部分,我似乎找不到解決方案:我嘗試對整個電子郵件使用RFC 2047編碼,但隨後 SES 返回 ‘missing final @ domain’ 錯誤,所以我嘗試只編碼一個本地部分,所以電子郵件將是

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

但這似乎也不起作用。有人成功解決了嗎?

所以這是我發現的:

基本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中所述。

引用自:https://stackoverflow.com/questions/46069163