我已将 exim4 配置为转发某些地址的电子邮件。
这些地址位于服务器是主要 MX 的虚拟域上。
这些域上的其他地址将传递到本地邮箱,但配置为转发的地址会转到服务器不是 MX 且不应将邮件传递到本地邮箱的外部域。
例如,如果服务器是 MX 的主要 MX example.com
,它应该在本地传递邮件,[email protected]
但[email protected]
应该转发到[email protected]
。
虚拟域和地址的所有数据都存储在 MySQL 中。
服务器操作系统是 Debian。
转发路由器的配置(/etc/exim4/conf.d/router/400_exim4-config_mysql_forward
如下:
mysql_forward:
debug_print = "R: forwarder(mysql) for $local_part@$domain"
driver = redirect
no_verify
no_expn
check_ancestor
forbid_smtp_code = true
skip_syntax_errors
domains = +local_domains
data = ${lookup mysql{SELECT forward_to FROM mail_forwarders WHERE domain='${quote_mysql:$domain}' AND localpart='${quote_mysql:$local_part}' AND active=1} {${sg{$value}{\\n}{, }}}}
exim -bt [email protected]
输出类似:
R: forwarder(mysql) for [email protected]
R: dnslookup for [email protected]
[email protected]
<-- [email protected]
router = dnslookup, transport = remote_smtp
host gmail-smtp-in.l.google.com [74.125.133.27] MX=5
host alt1.gmail-smtp-in.l.google.com [173.194.222.27] MX=10
host alt2.gmail-smtp-in.l.google.com [74.125.200.27] MX=20
host alt3.gmail-smtp-in.l.google.com [74.125.23.27] MX=30
host alt4.gmail-smtp-in.l.google.com [173.194.72.27] MX=40
我可以使用本地命令发送邮件并成功转发。
但是,当从外部来源发送邮件时,邮件会被拒绝550 Unrouteable address
,例如:
telnet mailserver.example.com 25
Connected to mailserver.example.com.
Escape character is '^]'.
220 mailserver.example.com ESMTP
EHLO office.mylocaldomain.com
250-mailserver.example.com Hello office.mylocaldomain.com [21.22.23.24]
250-SIZE 52428800
250-PIPELINING
250 HELP
MAIL FROM: <[email protected]>
250 OK
RCPT TO: <[email protected]>
550 Unrouteable address
QUIT
我确信需要更多配置才能完全诊断。请询问,我会提供。
原来这是
no_verify
路由器配置的错误。文档为转发器推荐此设置,但也许仅在本地转发时才适用。