У меня есть код, который проверяет адрес электронной почты. Он работает, пытаясь доставить почту через SMTP, а затем завершая работу, ничего не отправляя. Он работает большую часть времени, но в некоторых случаях - нет. У меня есть один из этих случаев, и я хотел бы знать, знает ли кто-нибудь, чем почтовый сервер может быть недоволен в моем запросе?
Вот сеанс TCP через порт 25 на smtp.hp.com (здесь я подставил реальные адреса электронной почты)
220-g1t6210.austin.hp.com ESMTP Postfix
HELO ednasmtp.beweb.co.nz
250 g1t6210.austin.hp.com
MAIL FROM: <a_real_email@beweb.co.nz>
250 2.1.0 Ok
RCPT TO: <a_real_hp_user_email@hp.com>
550 5.5.1 Protocol error
QUIT
550 5.5.1 Protocol error
У меня вопрос, почему постфиксный сервер HP сообщает «Ошибка протокола»? Моя почта недействительна?
smtp.hp.com
разрешается в 4 разных IP-адреса. Каждый из них отвечает на SMTP, но настроены они по-разному. Не зная, к какому из 4 вы подключились, трудно точно сказать, почему это не удалось. Но я могу шаг за шагом пройти ваш сеанс и объяснить несколько ошибок, допущенных клиентской стороной в процессе.
220-g1t6210.austin.hp.com ESMTP Postfix
Это частичное сообщение о состоянии от сервера, на что указывает значок -
. Последняя строка статуса будет иметь в этом месте. Таким образом, 3 из 4 SMTP-серверов отвечают 2-строчным сообщением о состоянии с задержкой между двумя строками. Один из них отвечает однострочным сообщением о состоянии, которое исключает, что оно обработало ваш сеанс. Клиенту нужно будет продолжать читать статусное сообщение, пока он не увидит все.
HELO ednasmtp.beweb.co.nz
На этом этапе клиент нарушает протокол, отправляя команду до получения полного статуса.
250 g1t6210.austin.hp.com
Здесь сервер нарушает протокол, отправляя другой код состояния в том, что соответствующий стандартам клиент интерпретирует как продолжение 220-
строка состояния сверху.
MAIL FROM: <a_real_email@beweb.co.nz>
Здесь клиент нарушает протокол посторонним пространством между :
и <
. Пространство в этом месте никогда не разрешается, хотя существуют почтовые серверы, которые игнорируют это пространство и позволяют продолжить транзакцию.
250 2.1.0 Ok
RCPT TO: <a_real_hp_user_email@hp.com>
Здесь клиент снова нарушает протокол так же, как и в MAIL
команда.
550 5.5.1 Protocol error
Это правильно, что произошла ошибка протокола. Трудно сказать, на какую из упомянутых выше ошибок протокола он жалуется. В RCPT
Сама по себе команда ошибочна, но в ней нет ошибок, которые не встречались ранее в транзакции.
QUIT
550 5.5.1 Protocol error
На данный момент сложно угадать, с какой стороны было закрыто соединение. А учитывая, что обе стороны нарушили протокол, это, вероятно, уже не важно. Мы даже не можем быть уверены, какие коды состояния относятся к каким командам.
Ваш хост не проходит ряд проверок, которых можно было ожидать от почтового сервера:
Если вы выполняете проверку адреса, вы можете задействовать любое количество методов предотвращения спама. Если раньше проверка адресов была в целом разрешена, то спамеры ограничили проверку. Исправление перечисленных выше пунктов может помочь, но я бы не стал на это рассчитывать.
В наши дни единственная широко поддерживаемая проверка адреса - это отправить электронное письмо со ссылкой для подтверждения, чтобы пользователь мог подтвердить свой адрес.
Вы можете просмотреть канонические сообщения по электронной почте и в постфиксах.