Исключение почты Java

В настоящее время я сталкиваюсь с проблемой, когда пытаюсь отправить электронное письмо с помощью JavaMail API. Исключение, которое я получаю из своей консоли приложения:

"javax.mail.MessagingException: 550 Access denied - Invalid HELO name (See RFC2821 4.1.1.1)"

кстати, я уже установил для свойства mail.smtp.auth значение true как: props.put("mail.smtp.auth", "true"), но это все равно не работает, кто-нибудь знает? или сталкивались с подобной проблемой раньше?


person d1ck50n    schedule 01.03.2010    source источник


Ответы (2)


SMTP-сервер часто возвращает ошибку 550, когда имя хоста-отправителя не может быть обратно преобразовано в исходный IP-адрес. Это позволяет почтовым серверам немного аутентифицировать, что отправляющий клиент является тем, кем он себя называет. К сожалению, многие тестовые клиенты — особенно системы за устройством NAT — будут иметь исходные IP-адреса, которые не сопоставляются ни с одним именем.

Например, машина, на которой я это набираю, имеет немаршрутизируемый IP-адрес 192.168.1.103, а мое имя хоста может быть so.example.myhouse, что прекрасно работает, потому что мой маршрутизатор делает вид, что пакеты с моего рабочего стола приходят из (например,) 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

заменять

props.put("mail.smtp.auth", true); 

to

props.put("mail.smtp.auth", "true");

и это работает :)

person d1ck50n    schedule 02.03.2010