Fsend.Host :='smtp.163.com';
 Fsend.Port :=25;
 FSend.UserID:='penghonglsy';
 FSend.Password:='********';  
 try
  FSend.connect;
 finally
  FSend.disconnect;
  showmessage('连接不成功!');
 end;
我的是宽带,网速是512k 为什么老是连接不成功呢???

解决方案 »

  1.   

    //这是一个演示程序。拿来就可以直接使用了。
    // 窗体上有一个 BUTTON 控件 ,一个 LABEL 控件 ,一个 NMSMTP 控件 
    // 带密码险证的邮件发送程序需要 BASE64 编码 ,DecodeBase64 和  EncodeBase64
    // 为解码和编码函数 
    // 在 263 、 163 和 SOHU 上都能发送成功 
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Psock, NMsmtp, ComCtrls;type
      TForm1 = class(TForm)
        NMSMTP1: TNMSMTP;
        Button1: TButton;
        Label1: TLabel;
        procedure Button1Click(Sender: TObject);
        procedure NMSMTP1Connect(Sender: TObject);
        procedure NMSMTP1InvalidHost(var Handled: Boolean);
        procedure NMSMTP1ConnectionFailed(Sender: TObject);
        procedure NMSMTP1Status(Sender: TComponent; Status: String);
        procedure NMSMTP1SendStart(Sender: TObject);
        procedure NMSMTP1Success(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;//BaseTable 为 BASE64 码表 
    const BaseTable:string='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';var
      Form1: TForm1;
      AuthSucc:boolean;//  是否需要密码验证 
      function DecodeBase64(Source:string):string; // 解码函数 
      function FindInTable(CSource:char):integer;  //
      function EncodeBase64(Source:string):string; // 编码函数 
    implementation{$R *.DFM}//
    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;//////////
    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;procedure TForm1.NMSMTP1InvalidHost(var Handled: Boolean);
    begin
      label1.caption :='Invalid Host';
    end;procedure TForm1.NMSMTP1ConnectionFailed(Sender: TObject);
    begin
      label1.caption :='connect failed';
    end;procedure TForm1.NMSMTP1Status(Sender: TComponent; Status: String);
    begin
      label1.caption :=nmsmtp1.Status ;
    end;procedure TForm1.NMSMTP1SendStart(Sender: TObject);
    begin
      label1.Caption :='start send';
    end;procedure TForm1.NMSMTP1Success(Sender: TObject);
    begin
      label1.Caption:='send success!';
    end;end.