null

Ошибка "550 Sender verify failed" при отправке писем

Столкнулись с проблемой доставки писем к нам извне: отправителю возвращался Delivery failure с указанной ошибкой:

4.3.2.1 does not like receipient.
Remote host said[Response Message]: 550 Sender verify failed Giving up on 4.3.2.1.
STEP: RCPT TO

При этом на другие домены и в обратную сторону письма приходили.

После недолгих изысканий, выяснилось, что почтовый сервер клиента перестал принимать письма с пустым MAIL FROM. Что, на секундочку, нарушает RFC:

  5.2.9  Command Syntax: RFC-821 Section 4.1.2

         The syntax shown in RFC-821 for the MAIL FROM: command omits
         the case of an empty path:  "MAIL FROM: <>" (see RFC-821 Page
         15).  An empty reverse path MUST be supported.

Происходит это из-за механизма callout, который проверяет существование отправителя до принятия письма от удалённого сервера, пытаясь "отправить" ему письмо указывая при этом пустой MAIL FROM:

root@mailserver:/root# telnet mx.remote.host.com 25
Trying 1.2.3.4...
Connected to mx.remote.host.com.
Escape character is '^]'.
220 ESMTP AntiSpam Service Enterprise Edition
helo mail.server.ru
250 [Sniper] OK
mail from: <>
501 [Sniper] Sender is null.
Connection closed by foreign host.

В ответ на пустой MAIL FROM, удалённый сервер отвечает 501 [Sniper] Sender is null. Хотя по RFC он обязан принимать письма с пустым отправителем.

В качестве отправителя при callout не используется реальный ящик (например, postmaster@domain.com), так как удалённый сервер может инициировать callout в обратную сторону, что приведёт к зацикливанию  взаимных проверок.

После корректной настройки используемого антиспам ПО, проблема была устранена.