Exim

exim4 轉發器無法路由外部郵件但不是內部郵件

  • September 20, 2016

我已將 exim4 配置為轉發某些地址的電子郵件。

這些地址位於伺服器是主要 MX 的虛擬域上。

這些域上的其他地址將傳遞到本地郵箱,但配置為轉發的地址會轉到伺服器不是 MX 的外部域,並且不應將郵件傳遞到本地郵箱。

例如,如果伺服器是 的主要 MX example.com,它應該在本地傳遞郵件,user1@example.comuser2@example.com應該轉發到user2realname@gmail.com

虛擬域和地址的所有數據都儲存在 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 user2@example.com輸出類似:

R: forwarder(mysql) for user2@example.com
R: dnslookup for user2realname@gmail.com
user2realname@gmail.com
   <-- user2@example.com
 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: <user@mylocaldomain.com>
250 OK
RCPT TO: <user2@example.com>
550 Unrouteable address
QUIT

我確信需要更多配置才能完全診斷。請詢問,我會提供。

原來這是no_verify路由器配置的錯誤。文件為轉發器推薦此設置,但也許僅在本地轉發時才適用。

引用自:https://serverfault.com/questions/803985