【发布时间】:2016-12-09 00:25:05
【问题描述】:
谁能诊断出我无法使用 Delphi 2010 和 Indy 10.5.5 连接到 smtp.office365.com?
我已经阅读了 Indy 专家 Remy Lebeau 在这个问题中提供的代码示例:Using INDY 10 SMTP with Office365。
我从该问题中提取了两个备用代码示例(一个使用 AuthType satDefault,另一个使用 satSASL),并将它们剪切并粘贴到控制台应用程序中。在每种情况下,运行时都会出现以下错误:
EIdOSSLUnderlyingCryptoError: Error connecting with SSL.
Error connecting with SSL.
error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
当我将 UseTLS 更改为 utUseExplicitTLS 时(如其他一些答案中所建议的那样,在尝试 TLS 之前需要纯文本连接),我收到以下错误:
EIdOSSLConnectError: Error connecting with SSL.
Error connecting with SSL.
EOF was observed that violates the protocol
我注意到其他答案中有一些关于设置 SSLOptions.SSLVersions 而不是 SSLOptions.Method(据说已被弃用)的参考,但在我的 Indy 版本中,TIdSSLIOHandlerSocketOpenSSL 上似乎不存在该属性。
我相信我拥有随 D2010 更新一起提供的 Indy 版本,但它有点过时了。如果存在更新版本,我愿意更新,但如果不安装 SVN、学习它、从开发中签出并重新编译,我似乎无论如何都找不到这样做。
最后,我尝试运行我的控制台应用程序的所有四个变体,但可执行目录中不存在 DLL,并且存在来自 OpenSSL v1.0.2h 的 DLL,但没有任何明显影响。
编辑:另一条信息。 客户端提供的 SMTP 凭据(此项目通过一个专用的出站电子邮件地址发送电子邮件)的格式为 project@myclientsdomain.com,而不是 @987654328 @。
【问题讨论】:
-
您还在使用 SSLv3 吗?尝试切换到 TLS 1.0
-
是的,我的代码使用 SSLv3,但我如何在不访问 SSLVersions 属性的情况下进行切换?
-
进一步看,我看到常量
sslvTLSv1可以分配给 Method 属性。我仍然像以前一样收到错误的版本号消息(指 SSL3_GET_RECORD)。 -
但是!将 sslvTLSv1 与 utUseExplicitTLS 结合起来似乎可以工作。进一步测试。
-
@LarryLustig:是的,这就是你需要做的。
标签: delphi ssl delphi-2010 indy tls1.2