Indy SMTP服务器拒绝连接

时间:2014-04-11 07:37:37

标签: delphi smtp indy10

我正处于一个新项目的最开始,在一个对我来说不熟悉的领域。

我想编写一个应用程序,该应用程序将充当基于Windows的中间人电子邮件客户端,例如Thunderbird等,以及远程SMTP服务器。原因是我的应用程序在通过时会对电子邮件进行一些轻微操作。

所以,我想我会想要TIdSMTPServer。我决定使用端口6789,以防任何可能的冲突(我怀疑,但是...... j.i.c)。

我将SMTP服务器的DefaultPort设置为6789,我还将SMTP服务器绑定到127.0.0.1:6789属性中的Bindings(并且,正如@SirRufo指出的那样,我设置了服务器.active to true)..

现在,我添加了一个带有一些测试代码的按钮,基于this SO question。我所做的唯一更改是将端口从SMTP.Port := 465;更改为SMTP.Port := IdSMTPServer.DefaultPort(主机保留为127.0.0.1)。

然而,当我尝试连接我的IdSMTPServer的{​​{1}}方法时,从未调用过,我得到一个异常,“EIdSocketError#10061 Connection refused”。

知道我做错了吗?

(有没有描述IdSMTPServer使用的指南或教程?)

1 个答案:

答案 0 :(得分:2)

连接TIdSMTPServer

没有问题
type
  TForm1 = class( TForm )
    IdSMTP1 : TIdSMTP;
    IdSMTPServer1 : TIdSMTPServer;
    Button1 : TButton;
    ListBox1 : TListBox;
    procedure Button1Click( Sender : TObject );
    procedure IdSMTPServer1Connect( AContext : TIdContext );
    procedure IdSMTPServer1Disconnect( AContext : TIdContext );
  private
    procedure Log( const AMsg : string );
  public
    { Public-Deklarationen }
  end;

var
  Form1 : TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click( Sender : TObject );
begin
  // Server Settings
  IdSMTPServer1.DefaultPort := 6728;
  IdSMTPServer1.OnConnect := IdSMTPServer1Connect;
  IdSMTPServer1.OnDisconnect := IdSMTPServer1Disconnect;
  // Client Settings
  IdSMTP1.Host := '127.0.0.1';
  IdSMTP1.Port := IdSMTPServer1.DefaultPort;
  // Connect Client to Server
  IdSMTPServer1.Active := True;
  try
    IdSMTP1.Connect;
    IdSMTP1.Disconnect( True );
  finally
    IdSMTPServer1.Active := False;
  end;
end;

procedure TForm1.Log( const AMsg : string );
begin
  if MainThreadID = TThread.CurrentThread.ThreadID
  then
  begin
    ListBox1.ItemIndex := ListBox1.Items.Add( AMsg );
  end
  else
    TThread.Queue( nil,
        procedure
      begin
        Log( AMsg )
      end );
end;

procedure TForm1.IdSMTPServer1Connect( AContext : TIdContext );
begin
  Log( 'Connect' );
end;

procedure TForm1.IdSMTPServer1Disconnect( AContext : TIdContext );
begin
  Log( 'Disconnect' );
end;