email - 非 ASCII 电子邮件地址和 SMTP

标签 email unicode smtp quoted-printable percent-encoding

有没有办法让这封电子邮件永远起作用? łō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似乎工作正常。不过,用户部分让我很头疼。

我以为我可以像在 url 中那样对它进行 utf8+percent 编码(结果为“%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 的电子邮件系统特别对待。

最佳答案

Unicode 是一个彻头彻尾的红鲱鱼;这与奇怪的字符或编码无关,而与 % 有关。 .
“中继访问被拒绝”是来自 Postfix 的错误消息,当您要求它将邮件转发到其他服务器时会产生。 (“开放中继”曾经并且很可能仍然是垃圾邮件问题的主要贡献者,就像开放代理很难禁止不法分子一样。)
那么,为什么 Postfix 认为您要求它转发这封邮件?让我们检查 docs :

2.3.3.1. Open Relay Prevention

Do not relay mail from remote hosts to remote addresses! (Unless the sender is authenticated).

This may seem obvious to most of us, but apparently this is a frequently overlooked consideration. Also, not everyone may have a full grasp of the various internet standards related to e-mail addresses and delivery paths (consider "percent hack domains", "bang (!) paths", etc).


等等,什么?我不认为我完全掌握了最后两件事是什么。
谷歌搜索 explains :

Years later, during the creation of the CSNET, another kind of relaying notation was developed. The first instantiation of the CSNET established computers at RAND and the University of Delaware to provide email connectivity for sites not connected to the ARPANET. In order to indicate the required relaying, a notation called the "percent hack" was created, so that an email address could be specified in the following form:

mary%compsci@udel


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

同一页面还解释了 ! 的 hacky 使用.
我不认为这些行为中的任何一个都是特定的(因此,“黑客”......);两者 %!应该是本地部分中的普通字符。但是 Postfix 默认支持这两种 hack,所以它们实际上是保留的。

至于 Unicode:百分比编码只是一个 URI 的东西,没有理由期望它可以在电子邮件地址的任何地方工作。
RFC6531将 SMTP 扩展为“国际”字符。它与任何其他与电子邮件相关的 RFC 一样清晰,但听起来您可以在本地部分使用 UTF-8,并且接收服务器将通过 SMTPUTF8 扩展名理解它,或者......它不会。 (据推测,任何拥有 Unicode 本地部分的人都已经在使用能够理解 Unicode 的电子邮件服务器。)

关于email - 非 ASCII 电子邮件地址和 SMTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14777792/

相关文章:

email - 为什么仍在使用 POP3 协议(protocol)?

c# - 如何使用 smtp4dev 接收电子邮件

django - 通过zoho发送smtp邮件连接超时错误

Django 替代 EMAIL_HOST 设置

php - 在 laravel markdown 电子邮件中嵌入图像

javascript - 电子邮件生成器 (Javascript)

java - 如何使用 java 库 Jodd Email 将图像嵌入到电子邮件的 html 正文中?

ios - Swift countElements() 在计数标志 emoji 时返回不正确的值

php - 在 PHP 中使用 Unicode

python - Zeromq:不允许使用 unicode,请使用 send_unicode