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

Kev*_*ood 5 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.我需要使用这些吗?他们在做什么?

Rem*_*eau 17

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

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

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

要使用SASL,请设置TIdSMTP.AuthTypesatSASL然后填写TIdSMTP.SASLMechanisms集合,以指向TIdSASL要在应用中支持的算法的单独的组件.印有天然SASL组件DIGEST-MD5,CRAM-MD5,CRAM-SHA1,NTLM(实验), ,ANONYMOUS,EXTERNAL,OTP,PLAIN,SKEYLOGIN(SASL包装器AUTH LOGIN).如果您需要其他算法(例如Kerberos或GSSAPI),则必须编写自己的TIdSASL衍生组件.对于使用用户名/密码的算法,必须将值分配给单独的TIdUserPassProvider组件,然后将其分配给SASL组件(TIdSMTP.UserName并且这些TIdSMTP.Password属性不与SASL一起使用).您支持的SASL算法越多,您能够支持的服务器数量就越多.

对于仍然支持的服务器,AUTH LOGIN可以通过设置TIdSMTP.AuthTypesatDefault(并且TIdSMTP.ValidateAuthLoginCapability如果服务器支持AUTH LOGIN但可选择设置为False 但不响应EHLO命令而报告它),然后填写TIdSMTP.UserNameTIdSMTP.Password属性,或者将TIdSASLLogin组件包含在TIdSMTP.SASLMechanisms采集.

UseVerpUseNagle什么都没有做安全. VERP是一个SMTP扩展,用于检测由于无法传递的错误而导致的弹跳电子邮件.Nagle是用于优化网络数据包的网络算法.

  • @JensMühlenhoff:我没有提到它,因为它很少(如果有的话)在客户端使用,当然也不是与`TIdSMTP` 一起使用。如果在首先建立 TLS 会话之前接收到命令,则更常用服务器端来生成错误。 (2认同)