Назад | Перейти на главную страницу

dsn = 5.6.0, stat = Ошибка формата данных при пересылке электронной почты

У нашего хоста 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 запись для этого поддомена.