Indy和smtps:无法连接

LaB*_*cca 2 delphi indy indy10 delphi-xe2

我正在尝试使用Indy发送来自smtps(安全smtp)的电子邮件,以及在这篇 MarcoCantù 文章中提到的技术.

这就是我正在使用的:

object SMTP: TIdSMTP
  IOHandler = IdSSLIOHandlerSocketOpenSSL1
  SASLMechanisms = <>
  UseTLS = utUseExplicitTLS
  Left = 32
  Top = 196
end
Run Code Online (Sandbox Code Playgroud)

SMTP.Host := 'smtps.pec.aruba.it';;
        SMTP.Port := 465;;
        SMTP.Username := 'myaddress@pec.it';
        SMTP.Password := 'myPassw0rd'; 
        MailMessage.Encoding := meDefault;
        MailMessage.From.Address := 'myaddress@pec.it';

        MailMessage.BccList.EMailAddresses := 'testaddress0@gmail.com';
        MailMessage.Subject := 'Test Mail';
        MailMessage.Body.Text := 'Please ignore this mail, This is a test';

        SMTP.Connect; //failure!!!
        SMTP.Send(MailMessage);
Run Code Online (Sandbox Code Playgroud)

程序挂起SMTP.Connect,但没有任何异常或有用的错误.

如果不是aboe我使用gmail setings,如文章中所解释一切都有效

你能给个建议吗?

我有Indy 10.5.8和ssl dll与exe相同的路径.

Rem*_*eau 6

Connect()挂起,因为您Port使用错误的UseTLS属性赋值连接错误.

端口465是SMTP的隐式SSL端口,这意味着客户端必须在连接到服务器之后立即加密连接,然后才能进行任何与SMTP相关的通信.服务器期望您的客户端发送SSL握手,但您的客户端因为您设置而没有这样做UseTLS=utUseExplicitTLS.这告诉TIdSMTP我们期望连接在连接到服务器时最初未加密,然后TIdSMTP可以向服务器发送显式STARTTLS命令以在需要时动态激活TLS加密.

因此,TIdSMTP正在等待服务器发送一个它永远不会发生的SMTP问候语,并且服务器期望您的客户端发送SSL握手,而这种情况从未发生过.发生死锁,直到其中一方断开连接.

如果连接到端口465,则必须进行设置UseTLS=utUseImplicitTLS.要使用UseTLS=utUseExplicitTLS,您需要连接到端口25或587.