我已将 exim4 配置为转发特定地址的电子邮件。
这些地址位于服务器作为主 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
我确信需要更多配置才能完全诊断此问题。请询问,我会提供。
答案1
事实证明这是路由器配置的错误no_verify
。文档建议转发器使用此设置,但也许这只适用于本地转发。