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

标签 delphi ssl delphi-2010 indy tls1.2

谁能诊断出我无法使用 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、学习它、从开发中 check out 并重新编译的情况下这样做。

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

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

最佳答案

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

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

到:

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

关于delphi - 无法通过 Delphi 2010 和 Indy 10.5.5 使用到 Office365 的安全 SMTP 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38740921/

相关文章:

delphi - Delphi 的运行时可更改 ORM/OPF 对象持久性框架

使用 SSL 证书身份验证的 PHP TCP 连接到 EPP API

Docker Traefik 无法解析 DNS(无法到达服务器并获取证书)

delphi - 查询未知接口(interface)类型

delphi - 如何在 Delphi 运行时更改继承类的父类?

delphi - 如何在Delphi项目中包含.pas?

delphi - 可以使用 VirtualProtect 更改 Delphi 中的资源吗?

java - 如何创建用于 Apache Tomcat 的 X509 自签名证书

c++ - 屏幕录像机

delphi - 如何从 delphi 解析 tnsnames.ora 文件?