无法通过 Delphi 2010 和 Indy 10.5.5 使用与 Office365 的安全 SMTP 连接

Cannot use secure SMTP connection to Office365 with Delphi 2010 and Indy 10.5.5

任何人都可以使用 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 (据说已弃用)但是 属性 在我的 TIdSSLIOHandlerSocketOpenSSL 上似乎不存在Indy 版本。

我相信我有 D2010 更新附带的 Indy 版本,但它有点过时了。如果存在新版本,我愿意更新,但似乎无法在不安装 SVN、学习它、从开发中检出并重新编译的情况下这样做。

最后,我尝试了 运行我的控制台应用程序的所有四个变体,可执行目录中没有 DLL,并且来自 OpenSSL v1.0.2h 的 DLL 没有任何明显的效果。

编辑:另一条信息。 客户端提供的 SMTP 凭据(该项目通过单个专用出站电子邮件地址发送电子邮件)的形式为 project@myclientsdomain.com,而不是 @office365.

显然,自从雷米在链接问题中写下答案后,Office365 已停止支持 SSLv3(大概是为了避免已知的漏洞),现在需要 TLS。如果您更改这两行,他在原始问题中的回答中的代码将起作用:

idSMTP1.UseTLS := utUseImplicitTLS;
TIdSSLIOHandlerSocketOpenSSL(idSMTP1.IOHandler).SSLOptions.Method := sslvSSLv3;

至:

idSMTP1.UseTLS := utUseExplicitTLS;
TIdSSLIOHandlerSocketOpenSSL(idSMTP1.IOHandler).SSLOptions.Method := sslvTLSv1;