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

    最佳答案

    使用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(实验性),ANONYMOUSEXTERNALOTPPLAINSKEYLOGIN的本地SASL组件(SAST包装器用于AUTH LOGIN)。如果需要其他算法(例如Kerberos或GSSAPI),则必须编写自己的TIdSASL派生组件。对于使用用户名/密码的算法,必须将值分配给一个单独的TIdUserPassProvider组件,然后再将其分配给SASL组件(SASL不使用TIdSMTP.UserNameTIdSMTP.Password属性)。您支持的SASL算法越多,您将能够支持的服务器数量越多。

    对于仍支持AUTH LOGIN的服务器,可以通过将TIdSMTP.AuthType设置为satDefault(如果服务器支持TIdSMTP.ValidateAuthLoginCapability但不响应AUTH LOGIN命令而将EHLO设置为False,则可以使用它),然后填写TIdSMTP.UserNameTIdSMTP.Password属性,或在TIdSASLLogin集合中包括TIdSMTP.SASLMechanisms组件。
    UseVerpUseNagle与安全性无关。 VERP是SMTP扩展,用于检测由于无法传递的错误而导致的退回电子邮件。 Nagle是一种用于优化网络数据包的联网算法。

    关于delphi - SMTP Indy组件的安全性和身份验证属性有什么作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10503833/

    10-10 08:50