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

时间:2012-05-08 17:53:42

标签: delphi smtp indy

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

1 个答案:

答案 0 :(得分:16)

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

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

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

要使用SASL,请将TIdSMTP.AuthType设置为satSASL,然后填写TIdSMTP.SASLMechanisms集合,以指向您要支持的算法的单独TIdSASL - 派生组件你的应用。 Indy具有DIGEST-MD5CRAM-MD5CRAM-SHA1NTLM(实验性),ANONYMOUSEXTERNALOTP的原生SASL组件,PLAINSKEYLOGINAUTH LOGIN的SASL包装器)。如果您需要其他算法(例如Kerberos或GSSAPI),则必须编写自己的TIdSASL派生组件。对于使用用户名/密码的算法,必须将值分配给单独的TIdUserPassProvider组件,然后将其分配给SASL组件(TIdSMTP.UserNameTIdSMTP.Password属性不与SASL一起使用) 。您支持的SASL算法越多,您能够支持的服务器数量就越多。

对于仍然支持AUTH LOGIN的服务器,可以将TIdSMTP.AuthType设置为satDefault(如果服务器支持{{1},也可以选择将TIdSMTP.ValidateAuthLoginCapability设置为False。但是不会报告它以响应AUTH LOGIN命令),然后填写EHLOTIdSMTP.UserName属性,或者将TIdSMTP.Password组件包含在{{} 1}}集合。

TIdSASLLoginTIdSMTP.SASLMechanisms与安全无关。 UseVerp是一个SMTP扩展,用于检测由于无法传递的错误而导致的弹跳电子邮件。 Nagle是一种用于优化网络数据包的网络算法。