我已经使用以下方式设置了我的邮件服务器Digital Ocean 的指南, 其次是另一位导游。所以,现在如果我发送邮件到torvin@mydomain
,它就可以正常工作。
现在我正尝试为所有未送达的邮件设置一个万能地址。到目前为止我尝试过的方法:
1)更换
local_recipient_maps = proxy:pgsql:/etc/postfix/pgsql-boxes.cf $alias_maps
行如下:
local_recipient_maps =
luser_relay = torvin
我在日志中看到的结果:
postfix/lmtp[32692]: D5AD540085: to=, reply=mail.mydomain[private/dovecot-lmtp], delay=0.21, delays=0.17/0.01/0.01/0.02, dsn=5.1.1, status=bounced (host mail.mydomain[private/dovecot-lmtp] 说: 550 5.1.1 用户不存在: thisisjustatest@mydomain (回复 RCPT TO 命令))
2)取而代之
alias_maps = hash:/etc/aliases proxy:pgsql:/etc/postfix/pgsql-aliases.cf
和
alias_maps = hash:/etc/aliases pcre:/etc/aliases_pcre proxy:pgsql:/etc/postfix/pgsql-aliases.cf
并创建/etc/aliases_pcre
以下内容:
/.*/ torvin
结果是无限循环:
to=、relay=local、delay=0.01、delays=0/0/0/0、dsn=5.4.6、status=bounced (torvin@mydomain 的邮件转发循环)
3)相反尝试
virtual_alias_maps = pcre:/etc/aliases_pcre
现在我的所有邮件都发送到torvin
,并且从未传递给系统中的任何其他现有用户。
请帮忙!
答案1
这是因为/.*/
也包括torvin
。我假设您的proxy:pgsql:
有关于此用户的信息,但pcre:/etc/aliases_pcre
在此之前被查看。在这种情况下,最简单的解决方案是重新排序它们。此外,简单的hash:
数据库行将与您的 PCRE 方法相同。@example.com [email protected]
/.*/
除了技术实现之外,拥有这样的在具有多个用户的域上捕获所有内容是一个坏主意。不会有任何需要注意的实际消息。您将获得以下内容:
- 垃圾邮件对于不存在的常见地址,例如
[email protected]
。这是最常见的。 - 发送给其他人的消息。想象一下,有人试图在 上向 Jane Smith 发送机密信息,但忘记了点号或输入错误,例如。通常,发件人会收到用户不存在的通知,仔细检查电子邮件地址并重新发送消息。使用 catch-all 后,这种情况就不会发生。相反,这个人处于尴尬且很可能是非法的境地。
<[email protected]>
<[email protected]>
<[email protected]>
torvin
两者都应使用 SMTP 进行处理连接阶段拒绝。
答案2
当将 Postfix 与 Dovecot LMTP 一起使用时,catchall 功能不像 Postfixluser_relay
或 Cryus那样受原生支持lmtp_catchall_mailbox
。
实现它的可接受方式是使用 Postfix 的virtual_alias_maps = hash:/etc/postfix/virtual_alias
。
如果只有一个邮箱:
@example.com [email protected]
如果有多个邮箱,/etc/postfix/virtual_alias
则列出所有邮箱并将其别名化:
[email protected] [email protected]
[email protected] [email protected]
@example.com [email protected]
这个方法在《Postfix The Definitive Guide》一书中有提到。
更新
alias_maps
并且luser_relay
是 Postfix 本地传送代理 (LDA) 内的层。结帐https://www.postfix.org/postconf.5.html#mailbox_transport.别名 > .forward 文件 > mailbox_transport > mailbox_command > home_mailbox > mail_spool_directory > fallback_transport > luser_relay。
如果您使用 lmtp,您可以完全替换 Postfix 本地传送代理。local_transport = lmtp:unix:private/dovecot-lmtp
并将所有别名放入 virtual_alias 中virtual_alias_maps = proxy:pgsql:/etc/postfix/pgsql-aliases.cf
虚拟别名会重写所有本地、所有虚拟和所有远程邮件目的地的收件人地址。https://www.postfix.org/virtual.5.html 我认为本地别名是多余的,并且仍然存在只是为了兼容性。
local_recipient_maps
可能会因为 smtpd_reject_unlisted_recipient 规则而被忽略。
当 1) 地址与虚拟 (5) 别名或规范 (5) 映射不匹配,并且 2) 地址对于其地址类无效时,该地址被视为“未知”。
virtual_alias 中存在一个包含所有信息的行,这意味着每个地址都将被接受。