问题是:我正在使用第三方电子邮件递送服务,该服务不接受名称部分中包含非ASCII字符的邮件地址,例如müller@example.com。
用Punycode编码这样的地址:
http://en.wikipedia.org/wiki/Punycode
产生这个地址:
xn--mller-kva@example.com
通过该服务向其发送邮件似乎有效。
但是,我不确定是否有人无法直接注册“xn--mller-kva@example.com”,因此会收到“müller@example.com”的电子邮件。
这可能会发生冲突吗?这个问题还有其他解决方案吗?
更新
感谢您的回答。以下是我们学到的内容摘要:
答案 0 :(得分:7)
电子邮件地址的本地部分不允许使用非ASCII字符。期。 Punycode仅适用于域名,不适用于电子邮件地址的本地部分。
然而,IETF很可能采用使国际化本地部件成为可能的标准。但是,这个标准可能不会基于punycode。
答案 1 :(得分:3)
您可以使用以下格式将邮件标题字段的各个部分编码为不同的字符编码:=?UTF-8?B?w6HDq8O0?=这允许您嵌入像变形虫这样的东西,但我很确定它没有'适用于实际地址部分。
没有理由不能使用这些字符来形成您的地址。 RFC5322定义了第3.4节中可能出现在地址部分中的字符,并且您在上面使用的所有字符都是有效的。然而,正如另一条评论所说,如果你发送给的邮件客户端无法解析这种格式,那么它就会毫无结果。
某些SMTP服务器可能“意外”允许变音符号,但由于它们不在支持的字符范围内,因此我不会冒险。
答案 2 :(得分:3)
我感到无聊并且今晚正在研究这个问题,显然现在已根据RFC 6531将其编入扩展SMTP标准,特别是SMTPUTF8。请参阅http://en.wikipedia.org/wiki/Extended_SMTP#SMTPUTF8
使用表情符号邮箱名称的简短实验在通过Gmail发送时返回以下错误:
信封的本地部分包含utf8但远程服务器不提供SMTPUTF8
无论我使用地址的表情符号还是punycode版本,都是一样的。
答案 3 :(得分:2)
进行了一些测试..本地部分的变音符号似乎在某些设置中有效。我的MUA(爪子)和出站中继(exim)以及接收MTA(postfix)都没有抱怨或做过任何punycode转换。然而,像gmail和hotmail这样的提供者根本不允许使用变音符号(经过测试的webmail和直接传入和传出的smtp)。我没有找到任何关于这个案例的文件,建议对本地部分进行惩罚。因为它没有记录,没有人这样做没有冲突问题: - )
结论:您可能不应该首先接受本地部分的变音符号,甚至不要尝试向这些地址发送电子邮件。 (如果大玩家不这样做并且RFC没有记录/支持,你为什么要这样做?)
答案 4 :(得分:0)
在电子邮件地址的本地部分中发送非us-ascii字符的唯一标准方法是通过rfc6532(国际化电子邮件标头)和rfc6531(SMTPUTF8的SMTP扩展名)。
据我所知,没有一种标准方法可以在电子邮件地址的本地部分对非us-ascii字符进行编码,特别是:
Puny代码仅用于域名,不适用于本地部分。但是您可以有一个本地部分,它看起来像某些字符串的精简编码,但它应该以精简编码的形式显示。如果邮件程序经过微弱的解码后决定显示它,则它是非标准行为。
答案之一(=?utf-8?Q?foobar?=
)中提到的编码字编码机制不适用于,仅适用于显示名称邮箱(这是不同的,但是相关,即您的邮件程序可能显示的内容而不是邮件地址)。
最后,这意味着müler@example.com
和xn--mler-0ra@example.com
是两个完全不相关的电子邮件地址
如果它们将是域,则具有相同的含义(但不是)
这样他们就可以发生碰撞。)
从理论上讲,您可以希望到现在(2019年)所有邮件服务器都支持 SMTPUTF8和所有客户端都支持国际化邮件,但遗憾的是我会 如果重要的话,不要指望它。
顺便说一句。碰巧电子邮件地址的本地部分是 可能需要非us-ascii字符的邮件标准 (据我所知)无法对其进行编码。所有其他部分都具有编码的单词,微不足道的字符,百分比,base64,带引号的可打印字符或其他某种形式的编码机制。