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相同的路径.
Connect()挂起,因为您Port使用错误的UseTLS属性赋值连接错误.
端口465是SMTP的隐式SSL端口,这意味着客户端必须在连接到服务器之后立即加密连接,然后才能进行任何与SMTP相关的通信.服务器期望您的客户端发送SSL握手,但您的客户端因为您设置而没有这样做UseTLS=utUseExplicitTLS.这告诉TIdSMTP我们期望连接在连接到服务器时最初未加密,然后TIdSMTP可以向服务器发送显式STARTTLS命令以在需要时动态激活TLS加密.
因此,TIdSMTP正在等待服务器发送一个它永远不会发生的SMTP问候语,并且服务器期望您的客户端发送SSL握手,而这种情况从未发生过.发生死锁,直到其中一方断开连接.
如果连接到端口465,则必须进行设置UseTLS=utUseImplicitTLS.要使用UseTLS=utUseExplicitTLS,您需要连接到端口25或587.