我在 Delphi XE8 中重新编译 Delphi XE3 应用程序。
该应用程序使用 TIdSMTP 对象将消息发送到 Amazon SES(尝试过爱尔兰和北弗吉尼亚)。
这些是 TIdSMTP 组件中设置的一些属性(更新:添加了更多字段):
IOHandler包含IdSSLIOHandlerSocketOpenSSL以下子字段:Destinationis email-smtp.eu-west-1.amazonaws.com:25,Hostisemail-smtp.eu-west-1.amazonaws.com,IPVersionisId_IPv4,MaxLineActionismaException,MaxLineLengthis16384,Portis25,ReadTimeOutis-1,RecvBufferSizeis32768,ReuseSocketisrsOSDependent,SendBufferSizeis32768,SSLOptions.MethodissslvTLSv1,SSLOptions.ModeissslmUnassigned,SSLOptions.SSLVersionsis[sslvTLSv1],TransparentProxyisIdSSLIOHandlerSocketOpenSSL.,TransparentProxy.AutenticationisNoAuthentication,TransparentProxy.IPVersion是Id_IPv4,TransparentProxy.Port是1080,TransparentProxy.Version是svNoSocks,UseNagle是TruePort是25UseTLS是utUseExplicitTLS- “关于印地”是 10.6.2.5263
使用 XE8,我得到“SSL 协商失败”。handler.Send(msg);以下代码中的异常。完全相同的代码适用于 XE3,所以我猜它可能与 Indy 更新有关。
var
handler: TIdSMTP;
.
.
handler.
handler.Connect;
handler.Send(msg);
为什么我在 XE8 中得到这个异常?现在安装 XE8 的机器与安装 XE3 的机器相同,并且 SSL dll 仍然在各自的 Degug 和 Release 输出目录中。XE8 目前只使用 Debug 输出目录,旧的 XE3 可执行文件仍然可以在 Release 输出目录中正常工作。
更新:只需更新开发机器中的旧 SSL DLL,即可解决此问题。显然,最新的 Indy 默认禁用不安全的东西。