我正在运行一个 Postfix 服务器,它使用 Dovecot LMTP 进行邮件传递。我这样做是因为它与筛子配合得很好。
然而,我最近收到了一些主题行中带有 Unicode 的电子邮件。
Postfix 可以正常接收此邮件,它显然支持 SMTPUTF8 - 但是,当它到达 LMTP 时它就会终止:
<me@myhost> (expanded from <meother@mhost>): SMTPUTF8 is required, but was not offered by host myhost[public/lmtp]
我在 Postfix SMTPUTF8 文档中读到,
当收到包含 SMTPUTF8 请求的邮件时,Postfix 仅在以下情况下才会将该邮件传送到非 SMTPUTF8 SMTP 或 LMTP 服务器:
没有消息标头值包含 UTF-8。
信封发件人地址不包含 UTF-8,
该特定 SMTP/LMTP 传送事务的信封收件人地址不包含 UTF-8。
注意:同一邮件的其他电子邮件传送事务中的收件人可能仍包含 UTF-8。
否则,Postfix 会将该电子邮件传送交易的收件人视为无法传送。传送状态通知消息将是 SMTPUTF8 消息。因此,它将受到与通过 SMTPUTF8 请求接收的电子邮件相同的限制。
--http://www.postfix.org/SMTPUTF8_README.html#detecting
相关部分是“仅当... [消息中没有 UTF8] 时,Postfix 才会将...传递给非 SMTPUTF8...LMTP 服务器”。
这虽然措辞笨拙,但其含义是,如果 Postfix 支持 UTF8,则它只会将 UTF8 邮件传递到下游服务器。
因为我收到 UTF8 邮件,Postfix 拒绝将其传送到 Dovecot LMTP。
这让我想到几个问题:
- Dovecot LMTP 支持 SMTPUTF8 吗? (看来不是: http://www.dovecot.org/list/dovecot/2013-January/thread.html#87756)
- Postfix 是否有一个“软失败”模式,它可以将邮件排队以供稍后发送,绕过 LMTP,或者做一些比失败更智能的事情?
答案1
长话短说:参见Summing up
!
我也经常收到UTF-8
带有字符的电子邮件Subject:
。到目前为止,从未在其他标头中出现任何情况。
虽然我不知道 postfix 中的“软失败”模式,但您可以设置另一个 smtp 传输并过滤通过它的反弹作为一种故障安全模式。但是,我自己还没有完成这个设置。截至目前,退回邮件一直在队列中,因为在到期之前无法投递。至少它们不只是返回给发件人,而且我还关注队列中的粘性成员。另一方面,我不愿意在这条路上走得更远,因为下面的方法对我有用(tm):
UTF-8
工作解决方案(仅在字符的情况下Subject:
)就是禁用后缀'smtputf8_enable
现在默认为“yes”的功能(即使用最新的 debian)。在main.cf中添加:
smtputf8_enable = no
摆弄也smtputf8_autodetect_classes
没有结果。
包含该行的电子邮件消息UTF-8
Subject:
现在正在由 postfix 处理并由 dovecot 保存,没有任何问题。
该解决方案可能看起来违反直觉,特别是对于措辞稍显尴尬的后缀文档(正如您已经提到的)。
关于 dovecot 支持的最新更新SMTPUTF8
似乎就是您所引用的更新。我记得在其他地方看到过一篇文章,SMTPUTF8
如果有的话,鸽舍不会很快实施[需要引用]。不知道这是否是一个权威的说法。
关于 dovecot 的另一条评论SMTPUTF8
可以在这里找到(包括您的参考资料和这个 SE 问题):https://dovecot.org/list/dovecot/2016-November/106029.html
连同下一篇文章,这个话题似乎在 2016 年底左右就陷入了停滞:https://dovecot.org/list/dovecot/2016-September/105474.html
截至 2022 年 10 月,仍然没有迹象表明 dovecot LDA/LMTP 会很快支持 SMTPUTF8。但是,现在正在使用 dovecot bug 跟踪器 ID“DOP-1045”(参见 https://dovecot.org/list/dovecot/2019-4月/115430.html)。
加起来:今天,如果您不需要标SMTPUTF8
头以外的标头支持Subject:
,您可能只需smtputf8_enable
在 postfix' main.cf 中禁用并保持原样的快乐。
华泰