使用C ++的SMTP普通身份验证问题

时间:2011-05-07 20:30:28

标签: windows visual-c++ smtp

使用MS Visual C ++和Boost asio,我正在尝试添加使用SMTP协议向应用程序发送电子邮件的功能。

当我尝试验证连接时出现问题。以下是假设尝试连接到1& 1提供商的服务器中的帐户的情况的快照,该服务器使用自己的名为“nemesis”的服务器。

S :服务器响应和 C :是客户端命令)用于测试目的,我们假设尝试从帐户sender @ mysite发送邮件。 com to 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

据我所知,服务器为用户提供了两种身份验证模式:LOGINPLAIN,我们尝试使用前者(最常用的模式)。

据说,从这一点来说,服务器应该回答用户名和密码的请求。一些如:

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:<....>\r\n"
S:    250 .....
C    "RCPT TO:  ..\r\n"
S:    250 ...
C:    "DATA\r\n"
S:    354 ...
C:    bla, bla, bla        <-  message- body
C:    \r\n.\r\n
S:    250 ...
C:    "QUIT\r\n"
S:    221 ...

1 个答案:

答案 0 :(得分:0)

像往常一样,有时最明显的是最后一个假设。在我的问题中,我使用的是普通命令

C: AUTH LOGIN

而不是

C: AUTH LOGIN\r\n

请注意,在Windows中使用Telnet时,不需要附加\r\n

发送编码的用户名和密码时请注意使用相同的附录。

顺便说一句,除了收到的评论之外,Erwin Hoffmann SMTP Authentication Tutorial的页面对我来说是一个帮助。