Я знаю, что SMTP-сервер требует TLS, поэтому я использую OpenSSL (в Windows).

openssl s_client -connect smtp.gmail.com:465 -crlf

Теперь я знаю, что мне нужно закодировать строку (в основном \x00myemail\x00password), в которой есть моя учетная запись и пароль, используя base64. Все работает довольно хорошо:

AUTH PLAIN <encodedString>
235 2.7.0 Accepted

Проблема в том, когда я пытаюсь написать свое сообщение:

MAIL FROM:<myemail>
250 2.1.0 OK qwertyzxcv.1 - gstmp
RCPT TO:<myemail>
RENEGOTIATING
depth=1 C = US, O = Google Inc, CN = Google Internet Authority
verify error:num=20:unable to get local issuer certificate
verify return:0

Правда в том, что я не понимаю это сообщение об ошибке. Нужно ли создавать какой-то сертификат? Если да, то как мне это сделать (опять же в Windows)?

РЕДАКТИРОВАТЬ [0]: я наконец решил проблему. Вы ДОЛЖНЫ написать команду rcpt в нижнем регистре, потому что R заставляет OpenSSL пересмотреть условия. Но сейчас у меня новая проблема. Похоже, что SMTP-сервер не может распознать команду de DATA :

DATA
502 5.5.1 Unrecognized command qwertyzxcv.1 -gsmtp

1 ответ1

3

Хорошо, я наконец решил две мои проблемы:

  1. Первая проблема была в RENEGOTIATING что нужно изменить позицию . Решение состоит в том, чтобы написать команды (или, по крайней мере, те, которые начинаются с R) в нижнем регистре. OpenSSL интерпретирует заглавную R как команду для пересмотра TLS.

  2. Вторая проблема заключалась в том, что сервер «не распознал команду DATA». Эта проблема в самом начале:

    openssl s_client -connect smtp.gmail.com:465 -crlf

Все учебники в Интернете говорят, что вы должны использовать опцию -crlf и это верно для Linux. Если вы используете Windows, НЕ используйте эту опцию. Этот вариант, согласно документации:

эта опция переводила перевод строки из терминала в CR+LF, как того требуют некоторые серверы.

Я думал, что, хотя Windows использует CR+LF, OpenSSL вынудил новую строку быть LF просто для согласованности с реализацией Unix. Я был неправ. На самом деле, сейчас я не знаю, что делает опция -crlf в Windows. Может быть, это переводит CR+LF в LF? Это было бы довольно странно, учитывая название опции.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .