delphi - 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 方法。
我应该如何尝试使用这个特定的服务器来完成发送工作?
谢谢
解决方案
很可能,有问题的服务器不允许 TLS 1.0,这是您启用的唯一版本。您应该使用 IOHandler 的SSLOptions.SSLVersions
属性而不是其SSLOptions.Method
属性,然后设置SSLVersions
为[sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2]
以便客户端可以根据服务器允许的协商使用 TLS 1.0、1.1 或 1.2。
推荐阅读
- c++ - 为什么是
的 std::size 不适用于原始数组参数 - spring-boot - RestTemplate 交换返回 URL 被拒绝
- java - Java - 根据用户输入生成代码,在运行时编译和运行它?
- ruby-on-rails - 如何设置动态resque队列
- python - 当我突出显示我的条目(tkinter)并按退格键时,没有任何反应?
- angular - 如何在 mat-select 中使用“overlayDir”指令?
- java - try-with-resources 何时关闭资源?
- delphi-xe8 - 使用类时无法解析单元名称“xxxxx”错误
- python-3.x - PySide2 如何制作透明的小部件背景
- c++ - 从未执行的注释行会导致崩溃