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

2023-12-15

任何人都可以诊断我使用 Delphi 2010 和 Indy 10.5.5 连接到 smtp.office365.com 的失败吗?

我已经阅读了 Indy 专家 Remy Lebeau 在这个问题中提供的代码示例:将 INDY 10 SMTP 与 Office365 结合使用.

我已经获取了两个备用代码示例中的每一个(一个使用 AuthTypesatDefault和另一个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 凭据(该项目通过单个专用出站电子邮件地址发送电子邮件)的形式为[email protected], 而不是@office365.


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

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

to:

idSMTP1.UseTLS := utUseExplicitTLS;
TIdSSLIOHandlerSocketOpenSSL(idSMTP1.IOHandler).SSLOptions.Method := sslvTLSv1;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 远程服务器上的 mysqldump

    如果有两台机器客户端和服务器 从客户端如何执行 mysqldump 到服务器 以便转储在客户端上可用而不存储在服务器中 Thanks 这是一个生成 mysqldump 的 PHP 脚本 它直接输出到客户端 不会在服务器上创建任何文件 htt
  • 什么允许函数在返回参数时隐式取消引用参数?

    在读的时候如何借用可变引用而不将其传递给函数 OP 的功能如下 fn deref lt a b a T gt t a mut b mut T gt a mut T t 这对我来说很有意义 然而 他们也指出 正文中的显式取消引用 不需要 fn
  • Java中删除注释的脚本

    有谁知道如何 或过程 在构建时从 Java 类文件中删除注释 当使用 Ant 构建项目时 我想对项目中的特定包执行此操作 任何 ANT 脚本或一些自定义代码最受欢迎 编译后没有任何注释 class file
  • 如何使用 python asyncio 编写 Consumer.Producer 代码?

    我的Python版本是3 6 1 我写了一些东西来使用 Python asyncio 实现消费者 生产者模型 但它并没有按预期工作 四个活动均已创建 但没有任何打印导出 async def consumer queue id while T
  • 使用管道时出现“文件名、目录名或卷标语法不正确。”

    当我在我的机器上运行以下命令 或任何带有管道 的命令 时 目录 findstr 目录 我收到以下消息 文件名 目录名或卷标语法不正确 单独运行 dir 命令或 findstr 命令效果很好 卷标是 volC 盘中的卷是 OSDisk卷序列号
  • wpf 中自定义镀铬 Windows

    我尝试使用 WindowStyle None 和AllowsTransparency True 在 wpf 中创建自定义镀铬窗口 但是 当我最大化窗口时 它会覆盖整个屏幕 并超出其边缘 它还会隐藏我的窗口底部的 Windows 栏 屏幕 就
  • 枚举器的行为会根据我们引用它的方式而变化吗?

    将列表枚举器的引用包装在类中似乎会改变其行为 匿名类的示例 public static void Main var list new List
  • 如何在swift中重载赋值运算符

    我想重写 CGFloat 的 运算符 如下所示 func inout left CGFloat right Float left CGFloat right 所以我可以执行以下操作 var A CGFloat 1 var B Float 2
  • SQL Server:计算每月总销售额,包括空月

    我正在尝试计算一个月内产品的总销售额 但我希望它包括任何 空 月份 没有销售额 并且仅选择最近 12 个月 这是我到目前为止的代码 declare ProductNo int set ProductNo 1234 SELECT YEAR o
  • 如何向 MySQL 表添加“权重”并根据这些权重选择随机值?

    我想创建一个表 每行都包含某种权重 然后我想选择概率等于 该行的权重 所有行的权重 的随机值 例如 如果有 5 行 权重为 1000 中的 1 2 3 4 5 我会得到大约 1 15 1000 67 倍第一行 依此类推 该表需要手动填写 然
  • 使用PowerShell查找字符串中的差异

    所以我正在使用 Compare Object 它对于比较文件效果很好 但如果只是字符串呢 有没有办法找出字符串之间的差异 CompareTo 擅长报告存在差异 但不报告差异是什么 例如 PS gt a PowerShell rocks PS
  • Numpy 结构化数组无法完成基本 numpy 操作

    我想操纵namednumpy 数组 加 乘 连接 我定义了结构化数组 types name1 int name2 float a np array 2 3 3 dtype types b np array 4 5 35 dtype type
  • pandas 有没有办法从系列中删除重复项?

    我有一个数据框在 标签 列中有一些用逗号分隔的重复标签 有没有办法从系列中删除重复的字符串 我希望 400 的输出只有博物馆 饮酒 购物 我无法用逗号分割并删除它们 因为该系列中有一些标签具有相似的单词 例如 博物馆 艺术博物馆 购物 因此
  • 下载已部署的GAE应用程序的源代码

    如果我的硬盘上丢失了已部署应用程序的源代码 我可以下载该应用程序的源代码吗 我浏览了应用程序仪表板 但找不到任何选项来检查它 不 您不能 并且没有计划提供此类功能 抱歉 下次考虑投资 VCS 和备份
  • 如何访问AWS Lambda中的标头?

    我正在使用 AWS Api 网关 我已经使用 API Gateway 创建了资源和方法 我创建了 Lambda 函数 用于生成 json 格式的签名 URL 以通过 CloudFront 访问 s3 存储桶 当我使用 GET 方法调用 la
  • CMYK 值作为背景颜色

    我必须使用 RGB 值设置 div 的背景颜色 我能做到这一点 div style width 100px height 100px background color rgb 255 0 0 div 现在 由于我也有 CMYK 0 1 0
  • 在 Active Collab API 中获取分页结果

    我刚刚发现你可以通过传入 page 参数来通过 api 获取分页结果 如下所示 projects client gt get projects 147 time records page 3 gt getJson 有没有办法知道一个项目有多
  • 动态改变jButton图标

    我有一个程序可以检测某些机器何时在线 并创建一个带有绿色 在线 图标的按钮来显示这一点 我想添加功能来定期检查这台机器是否仍然在线 如果不是 请将图标更改为我已经定义的 离线 图标 我知道如何设置图标 但我不知道如何做到这一点 一旦按钮已经
  • 用于重新启动 Raspberry Pi 的 Python 脚本

    我想我想要的是直接的 在 23 小时 59 分钟后重新启动我的 Raspberry Pi 的 Python 脚本 我尝试执行此操作而不是使用 cron 作业设置时间的原因是 Pi 没有用于时钟的板载电池 所以我不在乎时间是什么 如果连接到互
  • 无法通过 Delphi 2010 和 Indy 10.5.5 使用与 Office365 的安全 SMTP 连接

    任何人都可以诊断我使用 Delphi 2010 和 Indy 10 5 5 连接到 smtp office365 com 的失败吗 我已经阅读了 Indy 专家 Remy Lebeau 在这个问题中提供的代码示例 将 INDY 10 SMT