26.11.2010

503 valid RCPT command must precede DATA

Эта ошибка появляется, если начинается ввод поля DATA до того, как было принято, а не было введено поле RCPT.
В принципе описание ошибки весьма поверхностное и мало о чем говорит. Как правило такое бывает если:

1) Сервер сказал, что умеет PIPELINING. В результате получил batch команд, в которых идут сначала DATA, а затем RCPT. А иногда и несоклько RCPT. После чего опомнился и дал отлуп.

2) RCPT не был принят по каким либо причинам. Например не верна запись PTR для домена, указанного в ehlo или просто не стоит в угловых скобках.

3) Некоторые почтовики (mail.ru например) отказывают в случае, если MX запись домена, от имени которого отправляют указана в виде IP-адреса.
То есть вместо такой записи:
company.com MX 5 123.321.222.111
нужно писать так:
company.com     MX    5    mail.company.com.
mail                    A             123.321.222.111
Только не забудьте две вещи: после mail.company.com. должна стоять точка, иначе DNS присобачит к нему имя зоны и получите mail.company.com.company.com. А второе: такое изменение пройдет только тогда, когда mail.ru обновит свой DNS-кэш - а это несколько часов. То есть результат не сразу настанет.

Для очень подробного выявления проблемы можно использовать великолепную утилиту. Я ее запускаю на сервере, откуда уходит письмо. А она мне подробно показывает весь диалог в формате SMTP:


# swaks --to mailuser@mail.ru 
=== Trying mxs.mail.ru:25...
=== Connected to mxs.mail.ru.
<-  220 Mail.Ru ESMTP
 -> EHLO source-server.com
<-  250-mx170.mail.ru ready to serve
<-  250-SIZE 31457280
<-  250 8BITMIME
 -> MAIL FROM:
<-  250 OK
 -> RCPT TO:
<-  250 OK
 -> DATA
<-  354 Go ahead
 -> Date: Mon, 24 Sep 2012 04:05:16 +0000
 -> To: mailuser@mail.ru
 -> From: root@source-server.com
 -> Subject: test Mon, 24 Sep 2012 04:05:16 +0000
 -> X-Mailer: swaks v20120320.0 jetmore.org/john/code/swaks/
 ->
 -> This is a test mailing
 ->
 -> .
<-  250 OK id=1TFzv3-0005J7-8p
 -> QUIT
<-  221 mx170.mail.ru closing connection
=== Connection closed with remote host.

У команды много опций, например можете задать конкретный MX, опцией --server или вынудить подключиться по TLS: --tls

Комментариев нет:

Отправить комментарий