SMTP-сервер часто возвращает ошибку 550, когда имя хоста-отправителя не может быть обратно преобразовано в исходный IP-адрес. Это позволяет почтовым серверам немного аутентифицировать, что отправляющий клиент является тем, кем он себя называет. К сожалению, многие тестовые клиенты — особенно системы за устройством NAT — будут иметь исходные IP-адреса, которые не сопоставляются ни с одним именем.
Например, машина, на которой я это набираю, имеет немаршрутизируемый IP-адрес 192.168.1.103, а мое имя хоста может быть so.example.myhouse, что прекрасно работает, потому что мой маршрутизатор делает вид, что пакеты с моего рабочего стола приходят из (например, em>) 69.59.196.211, который является моим WAN-адресом. Однако, если вы используете props.put("mail.from", "[email protected]")
, SMTP-сервер может попытаться найти DNS и, очевидно, потерпеть неудачу для моего вымышленного имени хоста (то есть того, о котором глобальный DNS не знает).
Даже если я использовал DNS-имя, которое соответствует 69.59.196.211 (например, stackoverflow.com), SMTP-сервер может выполнить обратный поиск в DNS, чтобы убедиться, что адрес 211.196.59.69.in-addr.arpa соответствует stackoverflow.com. Если это не удастся, SMTP-сервер может счесть вас спуфером и вернуть 550.
Наконец, ваш отправляющий клиент или каждый хост с его блокировкой IP-адресов может быть занесен в черный список SMTP-сервером по причинам, которые вы не можете контролировать.
Без большего контекста, чем вы, вероятно, хотите опубликовать (имена и адреса виновных клиента и сервера), я не могу быть уверен, что это проблема SMTP/DNS, не связанная с Java, поэтому вам придется проверить эти биты самостоятельно. Вы можете вообще пропустить Java и telnet smtp-servername 25
и поговорить с сервером самостоятельно. Вы найдете RFC 2821 полезным, если попробуете.
person
msw
schedule
01.03.2010