我正在尝试使用 Indy 和说明的技术从 smtps(安全 smtp)发送电子邮件在 Marco Cantù 的这篇文章中 http://www.marcocantu.com/tips/oct06_gmail.html.
这就是我正在使用的:
object SMTP: TIdSMTP
IOHandler = IdSSLIOHandlerSocketOpenSSL1
SASLMechanisms = <>
UseTLS = utUseExplicitTLS
Left = 32
Top = 196
end
and
SMTP.Host := 'smtps.pec.aruba.it';;
SMTP.Port := 465;;
SMTP.Username := '[email protected] /cdn-cgi/l/email-protection';
SMTP.Password := 'myPassw0rd';
MailMessage.Encoding := meDefault;
MailMessage.From.Address := '[email protected] /cdn-cgi/l/email-protection';
MailMessage.BccList.EMailAddresses := '[email protected] /cdn-cgi/l/email-protection';
MailMessage.Subject := 'Test Mail';
MailMessage.Body.Text := 'Please ignore this mail, This is a test';
SMTP.Connect; //failure!!!
SMTP.Send(MailMessage);
i 程序挂在 SMTP.Connect 上,但没有任何异常或有用的错误。
如果我使用 gmail 设置而不是 aboe,如中所述文章 http://www.marcocantu.com/tips/oct06_gmail.html所有作品
您能给个建议吗?
我有 Indy 10.5.8 和 ssl dll 与 exe 位于同一路径中。
Connect()
挂起是因为您连接到错误的Port
与错误的UseTLS
财产分配。
端口 465 是 SMTP 的隐式 SSL 端口,这意味着客户端必须在连接到服务器后立即加密连接,然后才能发生任何 SMTP 相关通信。服务器期望您的客户端发送 SSL 握手,但您的客户端没有这样做,因为您设置了UseTLS=utUseExplicitTLS
。这说明TIdSMTP
期望连接在连接到服务器时最初是未加密的,然后TIdSMTP
可以发送明确的STARTTLS
命令服务器在需要时动态激活 TLS 加密。
Thus, TIdSMTP
正在等待服务器发送 SMTP 问候语,但它永远不会发送,并且服务器期望您的客户端发送 SSL 握手,但它永远不会发送。僵局会发生,直到其中一方断开连接为止。
如果连接到465端口,则必须设置UseTLS=utUseImplicitTLS
反而。使用UseTLS=utUseExplicitTLS
,您需要连接到端口 25 或 587。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)