2010-07-29 227 views

回答

2

在Indy的TIdSMTP组件中使用代理的正确方法是利用TIdIOHandlerSocket的SocksInfo(Indy 9及更早版本)或TransparentProxy(Indy 10)属性。

对于印9及更早(仅支持SOCKS V4/4A/5代理):

  1. 分配TIdIOHandlerSocket组件到TIdSMTP.IOHandler属性
  2. 分配TIdSocksInfo组件到TIdIOHandlerSocket.SocksInfo属性。

对于印10(支持SOCKS,HTTP,和自定义代理):

  1. 分配TIdIOHandlerStack组分(从TIdIOHandlerSocket导出)给TIdSMTP.IOHandler属性
  2. 分配TIdSocksInfo,TIdConnectThroughHttpProxy,或TIdIOHandlerSocket.TransparentProxy属性的其他TIdCustomTransparentProxy派生组件。
1

使用INDY组件。

如果代理服务器和它的类型是事先知道的,那么在发送电子邮件之前,您必须在代理服务器中进行授权(假设使用TidTcpClient)。然后用IdSmtp发送电子邮件。

OR

如果type代理类型未知,尝试使用IdSocksInfo和IdIOHandlerSocket。调整它们以代理并与idSMTP绑定。

+0

SMTP会话必须在用于连接到代理的相同套接字连接上进行。因此,您的单独指示确实需要汇总在一起。您无法连接到未知代理,但是当您连接时,TIdSMTP必须使用相同的套接字。 Indy为此提供了内置功能。 – 2010-07-29 23:28:57

0

如果你之前做过,是否使用过Indy或其他东西?无论你有什么组件(Indy,ICS,其他),都有内置的代理支持(查看你的互联网组件集的属性),或者它没有。如果不是,请考虑“Overbyte ICS”或Indy。

我不是Indy的忠实粉丝。我已经使用过它,但随后转移到了Francois Piette的Overbyte ICS组件。如果您目前没有使用ICS,请尝试两种方法。

这可能不是你想要去的方式(你说你想使用SMTP),但为了未来的人寻找办法的好处,我还补充说,可以使用Windows MAPI集成也可以这样做,并且使用JVCL组件集中的TJvMail,让电子邮件客户端程序(Thunderbird,Outlook)从当前电子邮件客户端的“发件人地址”将邮件发送到您选择的电子邮件地址。