SMTP认证是怎么回事?(100分)

  • 主题发起人 主题发起人 jame
  • 开始时间 开始时间
J

jame

Unregistered / Unconfirmed
GUEST, unregistred user!
她的认证方法和算法是什么?谁能给我一个详细的RFC文档或者例子算法?卸啦!
 
function TSakSMTP.Authenticate: boolean;

function AuthLogin: Boolean;
var
Base64: TBase64;
stemp: string;
begin
FSendTextToSocket('auth LOGIN' + crlf);
FReceiveTextFromSocket;
if FReplyCode <> '334' then
begin
Result := false;
exit;
end;

Base64 := TBase64.Create;

Base64.EncodeData(UserID, stemp);
FSendTextToSocket(stemp + crlf);
FReceiveTextFromSocket;
if (FReplyCode <> '235') and (FReplyCode <> '334') then
begin
Result := false;
Base64.Free;
exit;
end;
stemp:='';
Base64.EncodeData(Password, stemp);
FSendTextToSocket(stemp + crlf);
FReceiveTextFromSocket;
if FReplyCode <> '235' then
begin
Result := false;
Base64.Free;
exit;
end;
Base64.Free;
Result := True;
end;

begin
Result := False;
case FAUthenticationType of
atLogin: Result := AuthLogin;
end;
FDidAuthenticate := True;
end;
 
哎,看不懂呀
 
http://www.nevrona.com/indy
这套组件支持SMTP认证,你下自已看看吧,我就是从那里取出来的。
 
为了避免乱发垃圾邮件,smtp 提供了验证用户的功能,就是在smtp服务器上
必须有指定的用户和密码,才能发信。

例如你在 263.net 上有用户 abcd 密码是 1234
当想通过smtp.263.net 的 abcd 用户发信时 必须提供 密码1234

上面的例子是一个服务器和客户对话的过程。
客户放说: AUTH Login (请验证我的身份)
服务器说: 334 XXXXXX (请用XXXXXX加密用户名)
客户方说: YYYYYY (给你加密的用户名YYYYYY)
服务器说:334 XXXXXX (请用XXXXXX加密密码)
客户方说: YYYYYY (给你加密的密码YYYYYY)
服务器说: 235 .... (通过验证,其它号码为不通过验证)

 
to fuliang:认证过程我知道,但是我想知道怎么计算密码和其他相关资料


to Seoul_BJ:谢谢您的回答,但是你的源代码中的userid和password从哪里来的?我看不出
来。。。。有相关的RFC文档嘛?再次感谢!
 
userid,password
如果你是修改或重做一个控件的话,这两个应该是你的控件的属性。
类似于POP控件的USERID和PASSWORD
 
多人接受答案了。
 
参看http://www.delphibbs.com/delphibbs/dispq.asp?lid=437775
 
Seoul_BJ的程序段用了SakSMTP,可是TBase64怎么来的?烦各位大侠指点,谢谢。
function TSakSMTP.Authenticate: boolean;

function AuthLogin: Boolean;
var
Base64: TBase64;
stemp: string;
begin
FSendTextToSocket('auth LOGIN' + crlf);
FReceiveTextFromSocket;
if FReplyCode <> '334' then
begin
Result := false;
exit;
end;

Base64 := TBase64.Create;

Base64.EncodeData(UserID, stemp);
FSendTextToSocket(stemp + crlf);
FReceiveTextFromSocket;
if (FReplyCode <> '235') and (FReplyCode <> '334') then
begin
Result := false;
Base64.Free;
exit;
end;
stemp:='';
Base64.EncodeData(Password, stemp);
FSendTextToSocket(stemp + crlf);
FReceiveTextFromSocket;
if FReplyCode <> '235' then
begin
Result := false;
Base64.Free;
exit;
end;
Base64.Free;
Result := True;
end;

begin
Result := False;
case FAUthenticationType of
atLogin: Result := AuthLogin;
end;
FDidAuthenticate := True;
end;

 
后退
顶部