uses Psock, NMsmtp;function testSmtp(user, psd, host: string; port: integer): boolean;
var nmsmtp1: TNMSMTP;
MailTo,MailBody:TStringList;
Tempstr1,Tempstr2 : String;
TrueStr1,TrueStr2 : String;
strStatus: string;
AuthSucc: boolean;
begin
AuthSucc := false;
nmsmtp1 := TNMSMTP.Create(nil);
Nmsmtp1.Host := host;
nmsmtp1.Port := port;
nmsmtp1.UserID := user;//发信人的用户名,必须是真实的
nmsmtp1.ReportLevel :=1;
Nmsmtp1.TimeOut :=10000;
nmsmtp1.Connect ; ///连接 strStatus:=nmsmtp1.Status;
if nmsmtp1.ReplyNumber = 250 then begin
strStatus:=nmsmtp1.Transaction('auth login'); //开始认证
end;
if nmsmtp1.ReplyNumber =334 then
begin
strStatus:=nmsmtp1.Transaction(EncodeBase64(user));// 用户名aaaaa
strStatus:=nmsmtp1.Transaction(EncodeBase64(psd)); //密码为123456
end; if nmsmtp1.ReplyNumber =235 then
begin
strStatus:='successful';
AuthSucc:=true;
end; result := AuthSucc; ////验证成功
nmsmtp1.Disconnect;
nmsmtp1.Free;
end;测试通过,反回true为验证通过
var nmsmtp1: TNMSMTP;
MailTo,MailBody:TStringList;
Tempstr1,Tempstr2 : String;
TrueStr1,TrueStr2 : String;
strStatus: string;
AuthSucc: boolean;
begin
AuthSucc := false;
nmsmtp1 := TNMSMTP.Create(nil);
Nmsmtp1.Host := host;
nmsmtp1.Port := port;
nmsmtp1.UserID := user;//发信人的用户名,必须是真实的
nmsmtp1.ReportLevel :=1;
Nmsmtp1.TimeOut :=10000;
nmsmtp1.Connect ; ///连接 strStatus:=nmsmtp1.Status;
if nmsmtp1.ReplyNumber = 250 then begin
strStatus:=nmsmtp1.Transaction('auth login'); //开始认证
end;
if nmsmtp1.ReplyNumber =334 then
begin
strStatus:=nmsmtp1.Transaction(EncodeBase64(user));// 用户名aaaaa
strStatus:=nmsmtp1.Transaction(EncodeBase64(psd)); //密码为123456
end; if nmsmtp1.ReplyNumber =235 then
begin
strStatus:='successful';
AuthSucc:=true;
end; result := AuthSucc; ////验证成功
nmsmtp1.Disconnect;
nmsmtp1.Free;
end;测试通过,反回true为验证通过
比如smtp.163.net就只能向163.net的用户转发电子邮件
我试过的
每当NMSMTP1.SendMail时就发生错误。
你可以下载Indy控件装在你的D5上.
也可以参考以前的帖子!!!!