我正在使用indy组件在delphi应用程序中实现电子邮件。我专门使用TidSMTP组件。我需要有效地支持所有主要的电子邮件服务器。我使用Mozilla Thunderbird作为我的电子邮件客户端,并且正在将smtp属性与TidSMTP组件中的属性进行比较。我试图找到描述TidSMTP属性之间关系的文档,但未能弄清楚。
有人可以解释这些比较方式以及它们的作用:
我还看到其他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-MD5
,CRAM-MD5
,CRAM-SHA1
,NTLM
(实验性),ANONYMOUS
,EXTERNAL
,OTP
,PLAIN
,SKEY
和LOGIN
的本地SASL组件(SAST包装器用于AUTH LOGIN
)。如果需要其他算法(例如Kerberos或GSSAPI),则必须编写自己的TIdSASL
派生组件。对于使用用户名/密码的算法,必须将值分配给一个单独的TIdUserPassProvider
组件,然后再将其分配给SASL组件(SASL不使用TIdSMTP.UserName
和TIdSMTP.Password
属性)。您支持的SASL算法越多,您将能够支持的服务器数量越多。
对于仍支持AUTH LOGIN
的服务器,可以通过将TIdSMTP.AuthType
设置为satDefault
(如果服务器支持TIdSMTP.ValidateAuthLoginCapability
但不响应AUTH LOGIN
命令而将EHLO
设置为False,则可以使用它),然后填写TIdSMTP.UserName
和TIdSMTP.Password
属性,或在TIdSASLLogin
集合中包括TIdSMTP.SASLMechanisms
组件。UseVerp
和UseNagle
与安全性无关。 VERP
是SMTP扩展,用于检测由于无法传递的错误而导致的退回电子邮件。 Nagle是一种用于优化网络数据包的联网算法。
关于delphi - SMTP Indy组件的安全性和身份验证属性有什么作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10503833/