6

我正在使用 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。我需要使用这些吗?他们在做什么?

4

1 回答 1

18

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

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

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

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

对于仍然支持 的服务器,AUTH LOGIN可以通过设置TIdSMTP.AuthTypesatDefault(如果服务器支持但未在响应命令时报告它,则可以选择设置TIdSMTP.ValidateAuthLoginCapability为 False )然后填写and属性,或者通过将组件包含在收藏。AUTH LOGINEHLOTIdSMTP.UserNameTIdSMTP.PasswordTIdSASLLoginTIdSMTP.SASLMechanisms

UseVerpUseNagle安全无关。 VERP是一个 SMTP 扩展,用于检测由于无法投递错误而导致的退回电子邮件。Nagle 是一种用于优化网络数据包的网络算法。

于 2012-05-08T19:55:35.793 回答