Проблема с простой аутентификацией SMTP с использованием C

#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.