Tl;dr:如果我向我的 Postfix+Dovecot 服务器发送一封主题包含 UTF-8 字符的电子邮件
- 来自 Gmail 的电子邮件=> Postfix+Dovecot 正确传送电子邮件
- 来自邮件的电子邮件(命令行) => Postfix+Dovecot 失败并出现错误
SMTPUTF8 is required, but was not offered by host example.com[private/dovecot-lmtp]
smtputf8_enable = no
没有什么区别。
我知道Dovecot 还不支持 smtputf8,但我不太确定它的实际含义。
我使用 Postfix、dovecot-lmtp 和 Dovecot 设置 Ubuntu 22.04 系统。一切都按预期工作,我已经在生产中使用它来接收来自 Internet 的电子邮件,但我正在专门使用 smtputf8 测试该问题。
测试 1:从 Gmail 到 Postfix 的电子邮件
作为第一个测试用例,我配置了 Postfix without smtputf8_enable = no
。所以这意味着“默认情况下没有更改”=> smtputf8 支持已启用。
从这里,我从外部 Gmail 帐户向我的 Postfix+Dovecot 托管地址发送了一封电子邮件,主题如下:
Hello, this is a test with UTF-8 💞💟❣🧡❤💘💨✡🥙🍠🍭🍂🏵🏹🔭💊⚗
结果:成功!电子邮件一直正确接收。
测试 2:从命令行发送电子邮件到 Postfix
与之前的配置相同。这次我通过 SSH 连接到外部服务器(运行带有 Postfix 的 Ubuntu 22.04),并通过命令行发送电子邮件,如下所示:
echo "Test from $(hostname)" | mail -s "Hello, this is a test with UTF-8 💞💟❣🧡❤💘💨✡🥙🍠🍭🍂🏵🏹🔭💊⚗" -a FROM:[email protected] [email protected]
该主题与 Gmail 中使用的主题完全相同(复制/粘贴)。
结果:失败!Postfix 收到电子邮件,但无法将其发送到 Dovecot:
postfix/lmtp[31775]: D2E1C475E0: to=<[email protected]>, relay=mailserver.example.com[private/dovecot-lmtp], delay=2.2, delays=2.2/0/0.09/0, dsn=5.6.7, status=bounced (SMTPUTF8 is required, but was not offered by host mailserver.example.com[private/dovecot-lmtp])
测试 3:从命令行发送电子邮件到 Gmail,转发到 Postfix
好的,让我们从命令行将电子邮件发送到我的外部 Gmail 帐户,然后将其转发到我的 Postfix+Dovecot 托管地址。
结果:成功!看起来 Gmail 从命令行接收我的电子邮件没有问题,然后它发挥了某种魔力,并且转发使其与我的 Postfix+Dovecot 设置兼容。
测试 4:使用 smtputf8_enable = no 从 Gmail 向 Postfix 发送电子邮件
让我们将 postfix 配置更改为:
smtputf8_enable = no
这是大多数教程推荐的。
从这里,我从外部 Gmail 帐户向我的 Postfix+Dovecot 托管地址发送了一封电子邮件,主题如下:
Hello, this is a test with UTF-8 💞💟❣🧡❤💘💨✡🥙🍠🍭🍂🏵🏹🔭💊⚗
结果:成功!我预计它会失败,但它与测试 1 完全没有区别!
测试 5:使用 smtputf8_enable = no 从命令行向 Postfix 发送电子邮件
这失败了,就像测试 2 一样。
对于大多数邮件内容,8 位 SMTP 传输不是必需的,因为字符可以用 7 位编码来表示。使用能够对要在其中使用非 ASCII 字符的标头应用有效编码的客户端。在大多数功能齐全的 MUA 中起草消息就可以了,您的 Webmail 界面只是一个示例。打开通过 Gmail 收到的邮件的来源,看看 sch 编码在实践中是什么样子的。
据我所知,其他两种可能的解决方案的进展都已停滞:
在那之前,您可能不想在Postfix 中提供 smtputf8,并且受到您使用的邮件客户端功能的限制。