我在 Delphi XE8 中重新编译 Delphi XE3 应用程序。
该应用程序使用 TIdSMTP 对象将消息发送到 Amazon SES(尝试过爱尔兰和北弗吉尼亚)。
这些是 TIdSMTP 组件中设置的一些属性(更新:添加了更多字段):
IOHandler
包含IdSSLIOHandlerSocketOpenSSL
以下子字段:Destination
is email-smtp.eu-west-1.amazonaws.com:25,Host
isemail-smtp.eu-west-1.amazonaws.com
,IPVersion
isId_IPv4
,MaxLineAction
ismaException
,MaxLineLength
is16384
,Port
is25
,ReadTimeOut
is-1
,RecvBufferSize
is32768
,ReuseSocket
isrsOSDependent
,SendBufferSize
is32768
,SSLOptions.Method
issslvTLSv1
,SSLOptions.Mode
issslmUnassigned
,SSLOptions.SSLVersions
is[sslvTLSv1]
,TransparentProxy
isIdSSLIOHandlerSocketOpenSSL.
,TransparentProxy.Autentication
isNoAuthentication
,TransparentProxy.IPVersion
是Id_IPv4
,TransparentProxy.Port
是1080
,TransparentProxy.Version
是svNoSocks
,UseNagle
是True
Port
是25
UseTLS
是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 默认禁用不安全的东西。