У нашего хоста Linux (CentOS) есть несколько общих доменов, один из которых - example.com (поддельные имена хостов и пользователей, используемые в этом сообщении); Мы используем /etc/mail/virtusertable
чтобы вся почта на example.com доставлялась пользователю exmpl, и ~exmpl/.procmailrc
пересылает почту по мере необходимости. Этот метод позволяет exmpl поддерживать свои собственные пересылки, чего нет в / etc / mail / aliases. Фактически, virtusertable имеет известных получателей для example.com и отклоняет почту неизвестным получателям. Мы выучили этот урок давно.
Однако почта, пересылаемая таким образом, не выполнялась:
Apr 30 21:33:30 bogus sendmail[25645]: r412XUQ8025645: to=person@bogus.org, ctladdr=exmpl (504/504), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30965, relay=[127.0.0.1] [127.0.0.1], dsn=5.6.0, stat=Data format error
Это выглядело довольно странно, потому что "person" - действительный пользователь на bogus.org, а на самом деле bogus.org является основным доменом на той же машине, что и example.com!
Как мы можем это исправить?
Многие другие решили эту проблему, исправив запись "localhost" в /etc/hosts
и / или настройку соответствующих записей DNS. Мы сделали это, и это не устранило нашу проблему.
Мы наконец заметили это: ctladdr=exmpl
Для почты, которая была доставлена правильно, эти записи в журнале показали, что это полный адрес электронной почты, например ctladdr=<person@bogus.org>
Чего не хватало, так это этой важной записи в virtusertable:
exmpl@bogus.org exmpl
Я не претендую на полное понимание этого (это считается моим вопросом!), Потому что для меня это выглядит как «обратное» использование virtusertable. Однако теперь пересылка почты, как указано выше, работает!
May 6 21:06:40 bogus sendmail[1482]: r4726ejj001480: to=<person@bogus.org>, ctladdr=<exmpl@bogus.org> (504/504), delay=00:00:00, xdelay=00:00:00, mailer=local, pri=62862, dsn=2.0.0, stat=Sent
Обычно становится понятнее, в чем проблема, если вы подключитесь к серверу MX по telnet через порт 25 и инициируете сеанс связи SMTP вручную.
В приведенном выше примере, где ctladdr=exmpl
, если вы ввели это как MAIL FROM
, сервер MX сказал бы вам, что домена не существует и поэтому он не может принимать вашу почту. У меня была проблема, где somedomain.com
определен в DNS и используется для веб-трафика, но Apache пытается отправлять почту как apache@www.somedomain.com
, и выполнение SMTP-диалога вручную покажет, что сервер MX не может найтиwww.somedomain.com
.
Тогда решение состоит в том, чтобы добавить A
или CNAME
запись для этого поддомена.