Я пытаюсь подключиться к почтовому серверу 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
Как сервер Mercury настроен в отношении проверки клиента имя хоста? Параметр EHLO должен быть fqdn клиента (но может быть IP-адресом клиента, если нет fqdn). Сервер Mercury может быть настроен на проверку обратного DNS на клиенте и/или отклонение немаршрутизированных адресов клиентов. Лучше всего захватить сеанс от рабочего клиента с помощью Wireshark и сравнить с неудачным сеансом. –
Кроме того, что такое определение кодировки 'serverOutput'? Если это не двоичный код, вы можете отправить CR-CR-LF, что может быть проблемой. –
О serverOutput Я не уверен, как это работает, я не могу попасть в исходный код, поскольку я упоминал, что он является частью пакета API JavaMail, но я согласен с вами и упомянул в своем сообщении, что я подозрительно, что CRLF может быть CR CR LF, как вы сказали –