#windows #visual-c #smtp
#Windows #visual-c #smtp
Вопрос:
Используя MS Visual C и Boost asio, я пытаюсь добавить возможность отправки электронной почты в приложение, использующее протокол SMTP.
Проблема возникает, когда я пытаюсь аутентифицировать соединение. Вот снимок ситуации, предполагающей попытки подключиться к учетной записи на сервере провайдера 1 amp; 1, который использует свой собственный сервер с именем «nemesis».
(S: ответ сервера, а C: является клиентской командой) в целях тестирования мы предполагаем, что попытка отправить сообщение из учетной записи sender@mysite.com для target@mysite.com
C: connect with hostname <smtp.1and1.es> and port <587>
S: 220 smtp.1and1.es (mreu1) Welcome to Nemesis ESMTP server
C: EHLO mysite.com
S: 250-smtp.1and1.es
S: 250-STARTTLS
S: 250-AUTH LOGIN PLAIN
S: 250-AUTH=LOGIN PLAIN
S: 250-PIPELINING
S: 250-SIZE 120000000
S: 250 HELP
C: AUTH LOGIN
S: 504 Unknown authentication mechanism
Насколько я знаю, сервер предлагает пользователю два режима аутентификации: LOGIN
и PLAIN
, и мы пытаемся использовать первый (наиболее используемый режим).
Предположительно, с этого момента сервер должен отвечать запросами имени пользователя и пароля. Некоторые как:
S: 334 VXNlcm5hbWU6
C: avlsdkfj <- Usename (base-64 encoded)
S: 334 UGFzc3dvcmQ6
C: lkajsdfvlj <- Password (base-64 encoded)
Я пробовал команду auth login
(в нижнем регистре) и auth=login
безуспешно.
Я предположил, что после получения доступ к остальной части процесса является стандартным. Сказать что-то вроде:
C: "MAIL FROM:<....>rn"
S: 250 .....
C "RCPT TO: ..rn"
S: 250 ...
C: "DATArn"
S: 354 ...
C: bla, bla, bla <- message- body
C: rn.rn
S: 250 ...
C: "QUITrn"
S: 221 ...
Комментарии:
1. Можете ли вы вставить какой-нибудь код? Я попробовал это с помощью ‘telnet’, и сервер 1 amp; 1 отправляет запрос имени пользователя, как и ожидалось.
2. telnet также отлично работал для меня.
3. @SimonJ @Luke. Большое спасибо за ваши комментарии. Это звучит как некоторая надежда для моего — я имею в виду, что, как обычно, проблема на моей стороне и, как результат, преодолима -. К сожалению, фактический код довольно сложный и нелегко воспроизводимый — подключение POP уже успешно реализовано -. Позвольте мне переосмыслить и перепроверить всю мысль и вернуться, как только у меня будет какое-то заключение в этом отношении. В любом случае, я хотел бы знать, можно ли после первоначального приветствия Nemesis напрямую использовать команду AUTH LOGIN точно так, как указано в моем OP.
Ответ №1:
Как обычно, иногда наиболее очевидной является последняя гипотеза. В моей проблеме я использовал простую команду
C: AUTH LOGIN
вместо
C: AUTH LOGINrn
Обратите внимание, что вам не нужно добавлять rn
при использовании Telnet в Windows.
Помните об использовании того же приложения при отправке закодированного имени пользователя и пароля.
Кстати, помимо полученных комментариев, мне очень помогла страница из руководства по аутентификации по SMTP Эрвина Хоффманна Erwin Hoffmann.