建议你改用indy。已经带有验证了。只要设置属性。
最新的9.0刚刚正式推出。
下面的代码也是smtp验证的。用的是nmsmtp。
没有试验过。procedure TForm1.Button1Click(Sender: TObject);
var MailTo,MailBody:TStringList;
begin
Nmsmtp1.Host :='smtp.sohu.com';
nmsmtp1.Port :=25;
nmsmtp1.UserID :='linbch';//发信人的用户名,必须是真实的
nmsmtp1.ReportLevel :=1;
Nmsmtp1.TimeOut :=10000;
nmsmtp1.Connect ;    ///连接
if AuthSucc=true then ////验证成功
begin
  MailTo:=TStringList.Create;
  MailTo.Add('[email protected]');
  MailBody.Add('Hello it is a test');
  nmsmtp1.PostMessage.FromAddress:='[email protected]'; //发信人的电子邮件地址
  nmsmtp1.PostMessage.ToAddress :=MailTo;
  nmsmtp1.PostMessage.Body:=MailBody;
  nmsmtp1.PostMessage.Subject :='My test';
  Mailto.Clear ;
  //Mailto.Add('c:\a.txt');
  //Mailto.Add('c:\b.txt');
  //nmsmtp1.PostMessage.Attachments:=MailTo; 附件
  MailTo.Free ;
  MailBody.Free;
  nmsmtp1.SendMail;
end;
end;
procedure TForm1.NMSMTP1Connect(Sender: TObject);
begin
//////连接成功,下面用户认证过程
  label1.caption:=nmsmtp1.Status;
  if nmsmtp1.ReplyNumber = 250 then
    label1.caption:=nmsmtp1.Transaction('auth login'); //开始认证
  if nmsmtp1.ReplyNumber =334 then //返回值为334,让你输入用BASE64编码后的用户名
    label1.caption:=nmsmtp1.Transaction('YWFhYWE=');// 用户名aaaaa
  if nmsmtp1.ReplyNumber =334 then  // 返回值为334,让你输入用BASE64编码后的用户密码
    label1.caption:=nmsmtp1.Transaction('MTIzNDU2'); //密码为123456
  if nmsmtp1.ReplyNumber =235 then
  begin
    label1.caption:='successful';
    AuthSucc:=true;
  end;
  //showmessage(label1.caption);
end;