使用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.AuthType
为satSASL
然后填写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 或 GSSAPI),则必须编写自己的TIdSASL
衍生组件。对于使用用户名/密码的算法,这些值必须分配给一个单独的TIdUserPassProvider
组件,然后再分配给 SASL 组件(TIdSMTP.UserName
和TIdSMTP.Password
属性不与 SASL 一起使用)。您支持的 SASL 算法越多,您能够支持的服务器数量就越多。
对于仍然支持 的服务器,AUTH LOGIN
可以通过设置TIdSMTP.AuthType
为satDefault
(如果服务器支持但未在响应命令时报告它,则可以选择设置TIdSMTP.ValidateAuthLoginCapability
为 False )然后填写and属性,或者通过将组件包含在收藏。AUTH LOGIN
EHLO
TIdSMTP.UserName
TIdSMTP.Password
TIdSASLLogin
TIdSMTP.SASLMechanisms
UseVerp
和UseNagle
安全无关。 VERP
是一个 SMTP 扩展,用于检测由于无法投递错误而导致的退回电子邮件。Nagle 是一种用于优化网络数据包的网络算法。