2012-10-16 3 views
0

Я пытаюсь подключиться к почтовому серверу Mercury с помощью Java-приложения, и я использую JavaMail api. Соединение не удается, и я получаю эту ошибку в журнале:Соединение API JavaMail с ошибкой сервера Mercury Mail

EHLO XXXX
554 Invalid HELO формат

Это означает, что он подключается к серверу, но формат вертолёт не то, что разъединить люблю , Я устал отлаживать его, и я добрался до этого кода в классе JavaMail «SMTPTransport», который говорит:

serverOutput.write (cmdBytes);
serverOutput.write (CRLF);
serverOutput.flush();

и в соответствии с кодом: закрытый статический конечный байт [] CRLF = {(byte) '\ r', (byte) '\ n'};
, что кажется совместимым с RFC 821

Я знаю, что на windows \ n имеет другое значение, но я не уверен, действительно ли это корень проблемы? Если это не так, то что может вызвать это? Я проверил почтовый сервер с почтовым клиентом, и он отлично работает, и я проверил код с почтовым сервером Джеймса, и он также отлично работает!

JavaMail API версии: 1.4.5 (последняя версия)
Mercury/32: 4,7

+0

Как сервер Mercury настроен в отношении проверки клиента имя хоста? Параметр EHLO должен быть fqdn клиента (но может быть IP-адресом клиента, если нет fqdn). Сервер Mercury может быть настроен на проверку обратного DNS на клиенте и/или отклонение немаршрутизированных адресов клиентов. Лучше всего захватить сеанс от рабочего клиента с помощью Wireshark и сравнить с неудачным сеансом. –

+0

Кроме того, что такое определение кодировки 'serverOutput'? Если это не двоичный код, вы можете отправить CR-CR-LF, что может быть проблемой. –

+0

О serverOutput Я не уверен, как это работает, я не могу попасть в исходный код, поскольку я упоминал, что он является частью пакета API JavaMail, но я согласен с вами и упомянул в своем сообщении, что я подозрительно, что CRLF может быть CR CR LF, как вы сказали –

ответ

2

Я сделал поиск Google на 554 Invalid HELO format и получил массу хитов о вашей конкретной проблеме Меркурия. Это ошибка.

http://community.pmail.com/forums/thread/4136.aspx

http://www.mantisbt.org/bugs/view.php?id=9645

http://ellislab.com/codeigniter/forums/viewthread/153130/

и т.д ...

+0

Вот и все! Благодарю. Я этого не понимаю, пост больше 4 лет, а один на главном ртутном форуме - 5 лет, и они еще не исправили его ?! –

0

Вам может понадобиться проверить журналы на сервере, чтобы выяснить, что это действительно жалуются, но ... Одна вещь, которую вы можете попробовать, - установить для свойства mail.stmp.localhost правильное имя хоста DNS для вашего компьютера. Из отладочного вывода похоже, что ваш компьютер не может определить свое имя и поэтому отправляет IP-адрес.

+0

это был журнал с сервера, сервер - это приложение на локальном хосте, я думаю, что ip является клиентом ip, а не сервером здесь! EHLO приходит от клиента, и он публикует свой IP-адрес, я использую 127.0.0.1, но то же самое происходит –

+0

Ваше приложение является клиентом в отношении почтового сервера. Предполагается, что команда EHLO включает имя хоста клиентской машины, в вашем случае - «localhost» или реальное DNS-имя на машине клиент/сервер. «127.0.0.1» не является именем хоста, это IP-адрес. Установите свойство для фактического имени хоста. –

Смежные вопросы