Mail2000如何实现SMTP认证?(50分)

B

Blueman

Unregistered / Unconfirmed
GUEST, unregistred user!
我在SMTP的Connect方法里加了下面的认证语句:
if FSocketTalk.ServerResult then
begin
FSocketTalk.Talk('auth LOGIN'#13#10, #13#10, stNone);
FSocketTalk.WaitServer;
end;
ShowMessage(UDecodeBase64(FSocketTalk.LastResponse));
if FSocketTalk.ServerResult then
begin
FSocketTalk.Talk(UEncodeBase64('xxxxx')+#13#10, #13#10, stPass);
FSocketTalk.WaitServer;
end;
//ShowMessage(UDecodeBase64(FSocketTalk.LastResponse));

if FSocketTalk.ServerResult then
begin
FSocketTalk.Talk(UEncodeBase64('xxxxx')+#13#10, #13#10, stNone);
FSocketTalk.WaitServer;
end;
//ShowMessage(UDecodeBase64(FSocketTalk.LastResponse));
结果auth login命令下去后,那边返回334 dXNlcm5hbWU6,而我将用户名送过去后,那边
仍返回334 dXNlcm5hbWU6,密码送过去也是返回334 dXNlcm5hbWU6,请问高手如何解决?
谢谢!
 
那说明你的用户名不对,你没有把dXNlcm5hbWU6 unbase64 一下看看么?

多了一道用户身份的验证手续,验证之后的邮件发送过程与传统的SMTP方式一致。为了方便用户的使用,绝大多数的ESMTP服务器都继承了POP3服务器的帐号和密码设置体系,也就是说收发邮件都用同一个帐号和密码。

  根据[RFC 2554]规范,SMTP的认证功能主要是增加了AUTH命令。AUTH命令有多种用法,而且有多种认证机制。AUTH支持的认证机制主要有LOGIN,CRAM-MD5[注1]等。LOGIN应该是大多数免费邮件服务器都支持的,网易与新浪都支持。下面主要针对LOGIN方式进行介绍,其它方式请根据相应的RFC 规范进行修改。
LOGIN 方式口令-应答过程如下(S:表示服务器返回,C:表示客户端发送)

  1. C: AUTH LOGIN

  2. S: 334 dXNlcm5hbWU6

  3. C: dXNlcm5hbWU6

  4. S: 334 cGFzc3dvcmQ6

  5. C: cGFzc3dvcmQ6

  6. S: 235 Authentication successful.

   (1). 为客户端向服务器发送认证指令。

   (2). 服务端返回base64编码串,成功码为334。编码字符串解码后为"username:",说明要求客户端发送用户名。

   (3). 客户端发送用base64编码的用户名,此处为"username:"。

   (4). 服务端返回base64编码串,成功码为334。编码字符串解码后为"password:",说明要求客户端发送用户口令。

   (5). 客户端发送用base64编码的口令,此处为"password:"。

   (6). 成功后,服务端返回码为235,表示认证成功可以发送邮件了
 
解码后是username:, 我相信我的用户名没错,我把我的免费邮箱帐户全用上了,都不行
 
那估计是你的程序username Base64 encode 后发给server不对的 问题了.
你可以telnet 25 port. 把你的用户名用你的程序base64 password encode 后试试.
如果能行,就是你的 程序 在发送用户名时错了.
 
用新的Mail2000就行了:)
 
接受答案了.
 
顶部