我正在Delphi XE8中重新编译Delphi XE3应用程序。
应用程序使用TIdSMTP对象向Amazon SES(尝试过爱尔兰和北弗吉尼亚)发送消息。
这些是TIdSMTP组件中设置的一些属性(更新:添加了更多字段):
IOHandler
是IdSSLIOHandlerSocketOpenSSL
,包含以下子字段:
Destination
是email-smtp.eu-west-1.amazonaws.com:25,Host
是email-smtp.eu-west-1.amazonaws.com
,IPVersion
是Id_IPv4
,{{1} }是MaxLineAction
,maException
是MaxLineLength
,16384
是Port
,25
是ReadTimeOut
,-1
是RecvBufferSize
,32768
为ReuseSocket
,rsOSDependent
为SendBufferSize
,32768
为SSLOptions.Method
,sslvTLSv1
为{{ 1}},SSLOptions.Mode
为sslmUnassigned
,SSLOptions.SSLVersions
为[sslvTLSv1]
,TransparentProxy
为IdSSLIOHandlerSocketOpenSSL.
,TransparentProxy.Autentication
为NoAuthentication
},TransparentProxy.IPVersion
为Id_IPv4
,TransparentProxy.Port
为1080
,TransparentProxy.Version
为svNoSocks
UseNagle
是True
Port
是25
使用XE8,我得到“SSL协商失败”。以下代码中的行UseTLS
处的异常。完全相同的代码适用于XE3,所以我猜它可能与Indy更新有某种关系。
utUseExplicitTLS
为什么我在XE8中遇到此异常?现在安装XE8的机器与安装XE3的机器相同,并且SSL dll仍在相应的Degug和Release输出目录中。 XE8现在只使用Debug输出目录,旧的XE3可执行文件仍然可以从Release输出目录中正常工作。
更新:只需通过更新Dev计算机中的旧SSL DLL即可解决此问题。显然,最新的Indy默认禁用不安全的东西。