非 ASCII 邮箱地址和 SMTP

4
这封电子邮件有可能会起作用吗?łōręmıpśum@łōręmıpśum.com。这并非完全无意义的追求,我们的应用程序中输入了非ascii字符的波兰用户。 Gmail验证器将其标记为无效,但也许是因为这种情况太少,他们没有考虑到。 “łōręmıpśum.com”的punycode是“xn--rmpum-j0a3o6e4dtg.com”,而info@xn--rmpum-j0a3o6e4dtg.com似乎可以正常工作。不过用户名称部分令我头疼。
我曾认为我可以像在网址中一样对其进行UTF8 +百分比编码(结果为“%C5%82%C5%8Dr%C4%99m%C4%B1p%C5%9Bum”),但SMTP服务器返回我的邮件时出现错误:
The mail system

<%C5%82%C5%8Dr%C4%99m%C4%B1p%C5%9Bum@xn--rmpum-j0a3o6e4dtg.com>: host
    eforward3.registrar-servers.com[38.101.213.199] said: 554 5.7.1
    <%C5%82%C5%8Dr%C4%99m%C4%B1p%C5%9Bum@xn--rmpum-j0a3o6e4dtg.com>: Relay
    access denied (in reply to RCPT TO command)

Final-Recipient: rfc822; %C5%82%C5%8Dr%C4%99m%C4%B1p%C5%9Bum@xn--rmpum-j0a3o6e4dtg.com
Original-Recipient: rfc822;%C5%82%C5%8Dr%C4%99m%C4%B1p%C5%9Bum@xn--rmpum-j0a3o6e4dtg.com
Action: failed
Status: 5.7.1
Remote-MTA: dns; eforward3.registrar-servers.com
Diagnostic-Code: smtp; 554 5.7.1
    <%C5%82%C5%8Dr%C4%99m%C4%B1p%C5%9Bum@xn--rmpum-j0a3o6e4dtg.com>: Relay
    access denied

似乎电子邮件在本地SMTP服务器正常传递,但在远程端失败。可能是namecheap邮件服务器以ASCII为中心进行了配置。
我的主要问题是:我已经证明电子邮件的服务器部分可以是波兰语,但用户部分呢?如果不行,为什么?在我看来,上面的电子邮件虽然非常丑陋,但只是ASCII,不应该被不支持unicode的电子邮件系统特别处理。
2个回答

3
Unicode只是一个干扰,与奇怪的字符或编码无关,而与“%”有关。
“Relay access denied”是Postfix的错误消息,当您要求其将邮件转发到其他服务器时产生。 (“开放中继”曾经并且可能仍然是垃圾邮件问题的主要贡献者,就像开放代理使得很难禁止恶意用户一样。)
那么,为什么Postfix认为您正在请求它中继此邮件?让我们查看docs

2.3.3.1. 开放式中继预防

不要从远程主机中继邮件到远程地址!(除非发送者经过身份验证)。

这对我们大多数人来说似乎很明显,但显然这是一个经常被忽视的考虑因素。 此外,并不是每个人都完全掌握与电子邮件地址和传递路径相关的各种互联网标准(考虑“百分号黑客域”,“bang(!)路径”等)。

等等,什么?我不认为我完全掌握那最后两个东西是什么。

一篇Google搜索解释

多年后,在创建CSNET期间,另一种中继符号被开发出来。 CSNET的第一个实例在RAND和特拉华大学建立了计算机,为未连接到ARPANET的站点提供电子邮件连接。为了指示所需的中继,创建了一种称为“百分号黑客”的符号表示法,以便可以指定以下形式的电子邮件地址:

mary%compsci@udel

上述电子邮件地址指定用户“mary”在计算机“compsci”上拥有帐户,并且可以通过特拉华大学的中继主机到达。选择%符号是因为它没有被任何其他流行的电子邮件系统使用,并且因为它在视觉上类似于用于指定“在邮寄信件中关心”的符号“C / O”。尽管百分号黑客使多级中继成为可能,但其实际使用仅限于单个中继-一个%和一个@。

同一页还解释了 ! 的 hacky 使用。
我认为这些行为都没有规范(因此,“hack”…);本地部分中的 %! 都应该是普通字符。但 Postfix 默认支持这两种 hack,因此它们被视为保留字符。
关于Unicode:百分号编码是URI的专用方式,没有理由期望它在电子邮件地址中起作用。 RFC6531扩展了SMTP以支持“国际”字符。 它与其他任何与电子邮件相关的RFC一样清晰,但听起来您可以在本地部分中使用UTF-8,并且接收服务器将通过SMTPUTF8扩展名理解它,否则就不会理解。(假定任何具有Unicode本地部分的人都已经在使用理解Unicode的电子邮件服务器。)

0
用户部分只需要进行UTF8编码,不需要进行%编码。这个电子邮件完全可以使用"łōręmıpśum@xn--rmpum-j0a3o6e4dtg.com",左边使用UTF8,右边使用punycode(也称为IDNA)。

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