我正处于一个新项目的最开始,在一个对我来说不熟悉的领域。
我想编写一个应用程序,该应用程序将充当基于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使用的指南或教程?)
答案 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;