SMTP Indy 组件安全和身份验证属性有什么作用?

2023-11-23

我正在使用 indy 组件在 delphi 应用程序中实现电子邮件。我专门使用 TidSMTP 组件。我需要有效地支持所有主要的电子邮件服务器。我使用 Mozilla Thunderbird 作为我的电子邮件客户端,并将 smtp 属性与 TidSMTP 组件中的属性进行比较。我试图找到描述 TidSMTP 属性之间关系的文档,但未能弄清楚。

有人可以解释一下它们如何比较以及它们的作用:

  • 在 Thunderbird 中:连接安全性:(无、STARTTLS、SSL/TLS)。
  • 在 TidSMTP.UseTLS 中(utNoTLSSupport、utUseImplicitTLS、utUseRequireTLS、utUseExplicitTLS)

  • 在 Thunderbird 中:身份验证方法:(无身份验证、普通密码、加密密码、Kerberos/GSSAPI、NTLM)

  • 在TidSMTP中(用户名,密码,使用useAuthentication方法)

我还看到其他 TidSMTP 属性:UseEhlo、UseVerp、UseNagle。我需要使用这些吗?他们在做什么?


使用时STARTTLS,服务器的监听端口在连接时最初是未加密的。当客户端连接时,它可以发送一个可选的STARTTLS如果服务器支持,则向服务器发送命令以动态执行 SSL/TLS 握手。这允许旧的非 SSL/TLS 客户端继续连接到同一端口,同时允许较新的启用 SSL/TLS 的客户端使用 SSL/TLS(如果服务器上可用)。这对应于UseTLS=utUseExplicitTLS在印地。你需要设置UseEHLO为 True 才能使用UseTLS=utUseExplicitTLS,作为EHLO命令是如何TIdSMTP发现服务器是否支持STARTTLS命令与否。

使用时SSL/TLS代替STARTTLS,服务器的侦听端口始终使用加密,并且客户端必须在连接后立即启动 SSL/TLS 握手,然后才能交换任何其他数据。这对应于UseTLS=utUseImplicitTLS在印地。没有STARTTLS使用的命令。

对于身份验证,TIdSMTP有两个选项 - 旧的(且不安全)AUTH LOGIN由原始 SMTP 规范定义的命令,以及基于 SASL 的哈希/加密算法的 SMTP 扩展(Kerberos、GSSAPI、NTLM 等作为 SASL 算法实现)。

要使用 SASL,请设置TIdSMTP.AuthType to satSASL然后填写TIdSMTP.SASLMechanisms集合指向单独的TIdSASL-您希望在应用程序中支持的算法的派生组件。 Indy 拥有原生 SASL 组件DIGEST-MD5, CRAM-MD5, CRAM-SHA1, NTLM(实验),ANONYMOUS, EXTERNAL, OTP, PLAIN, SKEY, and LOGIN(SASL 包装器AUTH LOGIN)。如果您需要其他算法(例如 Kerberos 或 GS​​SAPI),则必须编写自己的算法TIdSASL-派生组件。对于使用用户名/密码的算法,必须将这些值分配给单独的TIdUserPassProvider然后分配给 SASL 组件(TIdSMTP.UserName and TIdSMTP.Password属性不与 SASL 一起使用)。您支持的 SASL 算法越多,您能够支持的服务器数量就越多。

对于仍然支持的服务器AUTH LOGIN,可以通过设置来使用TIdSMTP.AuthType to satDefault(并可选择设置TIdSMTP.ValidateAuthLoginCapability如果服务器支持则为 FalseAUTH LOGIN但没有报告此事以回应EHLO命令),然后填写TIdSMTP.UserName and TIdSMTP.Password属性,或者通过包括TIdSASLLogin组件中的TIdSMTP.SASLMechanisms收藏。

UseVerp and UseNagle与安全无关。VERP是一个 SMTP 扩展,用于检测由于无法送达错误而退回的电子邮件。 Nagle 是一种用于优化网络数据包的网络算法。

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

SMTP Indy 组件安全和身份验证属性有什么作用? 的相关文章

  • Delphi 是否在构造对象之前分配变量?

    Delphi 是否在对象完全构造之前分配实例变量 换句话说 给定一个变量 var customer TCustomer nil 然后我们构造一个客户并将其分配给变量 customer TCustomer Create 有没有可能custom
  • 如何检查文件是否有备用数据流?

    Delphi 有没有办法检查文件是否有任何备用数据流 看一下 Win32 APIFindFirstStreamW https msdn microsoft com en us library windows desktop aa364424
  • 在 XMLDocument 中使用 DocumentElement 时发生访问冲突

    当我尝试使用时 我总是遇到访问冲突DocumentElement of the XMLDocument 我创造XMLDocument基于某些文件的存在 错误信息 项目project1 exe引发异常类EAccessViolation 消息
  • 让线程在窗体关闭时保持运行

    我在我的应用程序上创建了一个同步线程 我想知道如果我关闭申请表 是否有办法让该线程保持打开状态 直到完成同步过程 调用线程的WaitFor方法在您的 DPR 文件中 之后Application Run线 如果线程已经运行完毕 那么WaitF
  • 构建机器是否需要单独的 Delphi XE4 许可证?

    用于通过以下方式构建应用程序dcc32在构建服务器上我可以使用 Delphi Trial 这种方法的许可证没有任何问题 现在 我将通过以下方式在 TeamCity 上构建 Delphi XE4 应用程序msbuild 我是否需要拥有构建机器
  • Delphi中AsInteger和Value有什么区别?

    我想知道以下两个与delphi中的数据集相关的语句之间的区别 dsMyDataSet ParamByName ID AsInteger 1122 If ID is integer dsMyDataSet ParamByName ID AsS
  • 使用 IOmniTaskControl/TOmniWorker 时等待 Invoke 完成

    我使用 TOmniWorker 创建了 IOmniTaskControl 以便我可以定期在特定线程上运行代码块 因此 我将根据需要在此 IOmniTaskControl 上调用 Invoke 当我这样做时 有时需要等待与该工作相关的执行完成
  • 为什么不提高EInvalidPointer?

    德尔福文档状态 http docwiki embarcadero com Libraries en System SysUtils EInvalidPointer 切勿提出E无效指针直接异常 E无效指针由内存管理器内部引发 我正在编写一个自
  • 当 datasnap 服务器中的用户授权失败时,是否可以更改响应代码?

    当用户授权失败时 是否可以更改 DataSnap Delphi XE3 服务器中的 HTTP 响应代码 目前正在回归HTTP 1 1 500 内部服务器错误 这可能发生在许多其他场景中 并且无助于描述问题 按照同样的想法 是否可以更改默认的
  • 如何获取属于某个进程的打开句柄的计数?

    您可以使用该程序流程浏览器 http technet microsoft com en us sysinternals bb896653查看正在运行的应用程序有多少个句柄 有没有办法用Delphi代码来获取这个数字 我有兴趣跟踪应用程序本身
  • SMTP 库 Python3:不太安全的应用程序访问

    自 5 月 30 日起 Google 已取消允许不太安全的应用程序访问 G Mail 我正在使用 SMTP 库从我的 Flask 网站发送电子邮件 由于这种方法需要 Google 刚刚删除的功能 所以我陷入了困境 我正在寻找此问题的任何解决
  • 如何使用 VCL 类的接口 - 第 2 部分 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 继续我之前关于使用 VCL 接口的调
  • 如何在以管理员身份运行模式下部署应用程序?

    如何部署应用程序 使其需要管理员权限 而无需最终用户手动执行此操作 我使用 Delphi 2009 来构建该应用程序 您可以使用以下命令通知 Windows 您的应用程序需要以管理员身份运行requestedExecutionLevel应用
  • 如何解决内存分段并强制FastMM释放内存给OS?

    注意 32 位应用程序不计划迁移到 64 位 我正在使用一个非常消耗内存的应用程序 并且几乎优化了与内存分配 取消分配相关的所有相关路径 应用程序本身没有内存泄漏 没有句柄泄漏 没有任何其他类型的泄漏 据我所知并经过测试 我无法触及的第 3
  • 在 Delphi 中强制非阻塞临时提示窗口

    我一直在寻找 但找不到解决方案 所以我想也许我应该简单地发布它 这是我想要在 Delphi 2009 中做的事情 在我的应用程序中的某个时刻 我想向用户显示一条消息 这应该是正常的提示窗口 在正常应用程序定义的提示暂停后自动消失 并带有自定
  • Delphi 如何与 Active Directory 集成?

    我们需要使用 Delphi 7 验证 Microsoft Active Directory 上的用户 最好的方法是什么 我们可以有两种情况 用户输入其网络用户名和密码 其中用户名可能包括域 然后我们检查活动目录是否是有效的活动用户 或者我们
  • Delphi - 通过 ADO 查询获取 Excel 行

    我有以下 Excel 文件 我将 AdoConnection ConnectionString 设置为 AdoConnection ConnectionString Provider Microsoft Jet OLEDB 4 0 Data
  • 创建FileStream时如何处理异常

    我有一个这样的函数 我想重构它 function Myfunction sUrl sFile String Boolean var GetData TFileStream begin Result False if the line bel
  • Delphi错误数据集未处于插入或编辑模式

    客观的 单击 TRxDBCombo 上的按钮调用搜索框 从搜索框中选择记录时 结果将设置为 TComboEditBox 的字段值 并发布在 TRxMemoryData 数据集中 错误 第二次调用此函数时出现数据集未处于插入或编辑模式 TDB
  • vcl组合框并不总是显示它有焦点

    当我从另一个控件切换到组合框时 它会显示文本周围带有虚线的框 但是当我以编程方式将控件设置为活动状态时 它不会显示相同的焦点指示器 这种行为有解决方法吗 我有德尔福XE6 MCVE unit Unit27 interface uses Wi

随机推荐

  • 无法将 spring-modules-validation 与 spring 3 一起使用

    我有以下 pom 文件
  • Git 扩展和 Meld 合并

    使用时是否可以使用Meld作为合并工具Git 扩展在 Windows 上 在 Git 扩展中 设置 gt Git 配置 Merge tool meld Path to mergetool C Program Files x86 Meld M
  • 还有比 pandas fillna() 更快的方法吗?

    Pandas fillna 速度非常慢 尤其是在数据框中存在大量丢失数据的情况下 还有比它更快的方法吗 我知道如果我简单地删除一些包含 NA 的行和 或列会有帮助 我尝试测试 np random seed 123 N 60000 df pd
  • 如何将投影应用于 Spring Data REST 查询方法资源?

    我正在使用 Spring Data REST 2 1 4 RELEASE 我创建 一个实体Booking 它的 REST 存储库 扩展CrudRepository named BookingRepository and a 投影 Booki
  • R 中的 For 循环是邪恶的吗?

    我听说你不打算将过程编程风格强加到 R 上 我发现这很难 我刚刚用 for 循环解决了一个问题 这是错误的吗 有没有更好 更 R 风格 的解决方案 问题 我有两列 Col1 和 Col2 Col1 包含以自由格式输入的职位名称 我想使用 C
  • UIImagePNGRepresentation(UIImage()) 返回 nil

    为什么UIImagePNGRepresentation UIImage 回报nil 我正在尝试创建一个UIImage 在我的测试代码中只是为了断言它已正确传递 我的两个 UIImage 的比较方法使用UIImagePNGRepresenta
  • ASP.NET 页面中应该在哪里完成操作?

    我对 ASP NET 非常陌生 经过一番摸索之后有几个问题 我想知道我是否做错了 我有这样做的坏习惯 我有兴趣了解 ASP NET 的运作方式 我的问题是 在哪里可以找到文档来指导我决定在哪里进行哪些处理 作为一些具体示例 我对这些问题的答
  • 将信号处理委托给 python 中的子进程

    如何从 python 脚本运行命令并委托给它信号 例如Ctrl C 我的意思是当我跑步时 例如 from subprocess import call call child proc I want child proc处理Ctrl C 我猜
  • [Vue warn]:无法挂载组件:Webpack 4 中未定义模板或渲染函数

    当我升级到 Webpack 并将相关依赖项升级到 v4 后 我开始收到此错误 Vue warn Failed to mount component template or render function not defined 这是我的相关
  • 如何获取函数调用的返回值指针?

    我只需要一个指向 time Time 的指针 因此下面的代码似乎无效 c go 5 无法获取 time Now 的地址 我只是想知道为什么 除了先对变量进行赋值并获取变量的指针之外 还有什么方法可以做到这一点吗 package main i
  • 为什么 ZUUL 强制 SEMAPHORE 隔离来执行其 Hystrix 命令?

    我注意到 Spring Cloud ZUUL 强制执行隔离为 SEMAPHORE 而不是默认的 THREAD 如 Netflix 推荐的那样 评论中org springframework cloud netflix zuul filters
  • 在 Jenkins 管道中解析 XML 文件

    Note 当我的 Jenkins 环境中只有一个主节点时 我发布了这个问题 这使得序列化成为一个较小的问题 因为没有其他节点可以通信 因此这里的代码不会在多节点环境上按预期运行 例如 readFile只会从主节点读取文件 根据我的经验 最好
  • JSP 比较运算符行为

    我想比较两种不同类型
  • 如何使用c++获得线性回归线的斜率?

    我需要获得线性回归的斜率 类似于以下链接中 Excel 函数的实现方式 http office microsoft com en gb excel help slope function HP010342903 aspx 是否有 C 库或某
  • 使用 Selenium Web Driver 测试动态加载的内容

    我正在开发一个具有基于 Web 的前端的系统 我正在使用 Selenium 对其进行测试 在一页上 向下滚动时会动态加载内容 也许您从 Facebook 的好友列表中知道这一点 因为这是要求之一 通过 Javascript 使用 Selen
  • “if”语句的编码风格[重复]

    这个问题在这里已经有答案了 最近 我注意到一些程序员将 if 语句倒着写的风格 也就是说 在测试中 他们首先放置常量值 然后放置正在测试的变量 例如他们写道 bar foo if MY CONSTANT bar then do someth
  • buildroot - 如何更改内核版本字符串

    我使用 buildroot 和 Armstrong linux Linux4sam 开发 SAM9G25 EK 板 我的脚本正在创建linux版本 2 6 39 这个 令人困惑 lib modules文件夹等 我想删除它 我发现只有两个文件
  • WordPress:在显示链接之前检查是否有以前的帖子

    我使用以下代码在我的 WordPress 博客上显示 以前的帖子 链接
  • 单元测试新手

    我想知道如何使用 Visual Studio 2008 net 2 0 在现有 相当大 的应用程序中实现单元测试 我知道为现有 遗留代码开发单元测试是不现实的 但我希望对代码进行测试 我找到了大量关于如何编写代码测试的示例 但没有找到关于如
  • SMTP Indy 组件安全和身份验证属性有什么作用?

    我正在使用 indy 组件在 delphi 应用程序中实现电子邮件 我专门使用 TidSMTP 组件 我需要有效地支持所有主要的电子邮件服务器 我使用 Mozilla Thunderbird 作为我的电子邮件客户端 并将 smtp 属性与