Я настроил exim4 для пересылки электронной почты на определенные адреса.
Адреса находятся в виртуальных доменах, для которых сервер является основным MX.
Другие адреса в этих доменах доставляются в локальные почтовые ящики, но адреса, настроенные для пересылки, отправляются во внешние домены, для которых сервер не является MX, и почта не должна доставляться в локальный почтовый ящик.
например если сервер является основным MX для example.com
, он должен доставлять почту локально для user1@example.com
но user2@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
в конфиге роутера. Документы рекомендуют этот параметр для серверов пересылки, но, возможно, это подходит только при локальной пересылке.