在DELPHI6中用INDY控件,只要设置一个属性就行了,看看以前的帖子,也有答案的。

解决方案 »

  1.   

    NMSMTP1.UserID := 'whoami' //随便设置个就行了--under Delphi5
      

  2.   

    回答了n多次的问题!
      StatusBar1.SimpleText := 'Now begin Authentication, plesae wait...';
      if nmsmtp1.ReplyNumber = 250 then
        nmsmtp1.Transaction('auth login'); //开始认证
      if nmsmtp1.ReplyNumber =334 then //返回值为334,让你输入用BASE64编码后的用户名
        nmsmtp1.Transaction('');// 用户名
      if nmsmtp1.ReplyNumber =334 then  // 返回值为334,让你输入用BASE64编码后的用户密码
        nmsmtp1.Transaction(''); //密码为???????
      if nmsmtp1.ReplyNumber =235 then
        StatusBar1.SimpleText := 'Authentication Success!'
      else
        StatusBar1.SimpleText := 'Authentication Failure!';
      

  3.   

    做到底,给你base64编码的函数
    //BaseTable为BASE64码表
          const
          BaseTable:string='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';      var
            function DecodeBase64(Source:string):string; //解码函数
            function FindInTable(CSource:char):integer;  //
            function EncodeBase64(Source:string):string; //编码函数
          function FindInTable(CSource:char):integer;
          begin
            result:=Pos(string(CSource),BaseTable)-1;
          end;
          ////
          function DecodeBase64(Source:string):string;
          var
            SrcLen,Times,i:integer;
            x1,x2,x3,x4,xt:byte;
          begin
            result:='';
            SrcLen:=Length(Source);
            Times:=SrcLen div 4;
            for i:=0 to Times-1 do
            begin
              x1:=FindInTable(Source[1+i*4]);
              x2:=FindInTable(Source[2+i*4]);
              x3:=FindInTable(Source[3+i*4]);
              x4:=FindInTable(Source[4+i*4]);
              x1:=x1 shl 2;
              xt:=x2 shr 4;
              x1:=x1 or xt;
              x2:=x2 shl 4;
              result:=result+chr(x1);
              if x3= 64 then break;
              xt:=x3 shr 2;
              x2:=x2 or xt;
              x3:=x3 shl 6;
              result:=result+chr(x2);
              if x4=64 then break;
              x3:=x3 or x4;
              result:=result+chr(x3);
            end;
          end;
          /////
          function EncodeBase64(Source:string):string;
          var
            Times,LenSrc,i:integer;
            x1,x2,x3,x4:char;
            xt:byte;
          begin
            result:='';
            LenSrc:=length(Source);
            if LenSrc mod 3 =0 then Times:=LenSrc div 3
            else Times:=LenSrc div 3 + 1;
            for i:=0 to times-1 do
            begin
              if LenSrc >= (3+i*3) then
              begin
                x1:=BaseTable[(ord(Source[1+i*3]) shr 2)+1];
                xt:=(ord(Source[1+i*3]) shl 4) and 48;
                xt:=xt or (ord(Source[2+i*3]) shr 4);
                x2:=BaseTable[xt+1];
                xt:=(Ord(Source[2+i*3]) shl 2) and 60;
                xt:=xt or (ord(Source[3+i*3]) shr 6);
                x3:=BaseTable[xt+1];
                xt:=(ord(Source[3+i*3]) and 63);
                x4:=BaseTable[xt+1];
              end
              else if LenSrc>=(2+i*3) then
              begin
                x1:=BaseTable[(ord(Source[1+i*3]) shr 2)+1];
                xt:=(ord(Source[1+i*3]) shl 4) and 48;
                xt:=xt or (ord(Source[2+i*3]) shr 4);
                x2:=BaseTable[xt+1];
                xt:=(ord(Source[2+i*3]) shl 2) and 60;
                x3:=BaseTable[xt+1];
                x4:='=';
              end else
              begin
                x1:=BaseTable[(ord(Source[1+i*3]) shr 2)+1];
                xt:=(ord(Source[1+i*3]) shl 4) and 48;
                x2:=BaseTable[xt+1];
                x3:='=';
                x4:='=';
              end;
              result:=result+x1+x2+x3+x4;
            end;
          end;