使用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 LOGINEHLOTIdSMTP.UserNameTIdSMTP.PasswordTIdSASLLoginTIdSMTP.SASLMechanisms
UseVerp和UseNagle安全无关。 VERP是一个 SMTP 扩展,用于检测由于无法投递错误而导致的退回电子邮件。Nagle 是一种用于优化网络数据包的网络算法。