首页 > 解决方案 > TIdSMTP:如何修复错误 SSL 协商失败

问题描述

多年来,我一直在使用 Indy 发送电子邮件,并且一直运行良好。目前我使用的是 Delphi 10.4,它附带了 Indy 版本。

今天,当我尝试使用特定服务器时,即使一切都像往常一样设置,我也遇到了这些异常:

Project myproject.exe raised Exception class EIdOSSLUnderlyingCryptoError with message 'Error connecting with SSL. error 1409442E:SSL routines:SSL3_READ_BYTES:tslv1 alert protocol version

紧接着:

Project myproject.exe raised Exception EIdTLSClientTLSHandShakeFailed with message : 'SSL negotiation failed'

端口是 587,到目前为止,我一直在 TIdSSLIOHandlerSocketOpenSSL.SSLOptions.Method 上使用 sslvTLSv1 方法。

我应该如何尝试使用这个特定的服务器来完成发送工作?

谢谢

标签: delphisslindyindy10

解决方案


很可能,有问题的服务器不允许 TLS 1.0,这是您启用的唯一版本。您应该使用 IOHandler 的SSLOptions.SSLVersions属性而不是其SSLOptions.Method属性,然后设置SSLVersions[sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2]以便客户端可以根据服务器允许的协商使用 TLS 1.0、1.1 或 1.2。


推荐阅读