使用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
命令,和SMTP擴展基於SASL的散列/加密算法(Kerberos的,GSSAPI,NTLM等被實現作爲SASL算法)。
要使用SASL,設置TIdSMTP.AuthType
到satSASL
然後填寫TIdSMTP.SASLMechanisms
收集在你想要在你的應用程序支持的算法單獨TIdSASL
衍生成分點。印有天然SASL組件DIGEST-MD5
,CRAM-MD5
,CRAM-SHA1
,NTLM
(實驗),ANONYMOUS
,EXTERNAL
,OTP
,PLAIN
,SKEY
,和LOGIN
(SASL包裝器AUTH LOGIN
)。如果您需要其他算法(例如Kerberos或GSSAPI),則必須編寫自己的TIdSASL
衍生組件。對於使用用戶名/密碼的算法,必須將值分配給單獨的TIdUserPassProvider
組件,然後將其分配給SASL組件(TIdSMTP.UserName
和TIdSMTP.Password
屬性不用於SASL)。您支持的SASL算法越多,您將能夠支持的服務器數量越多。
對於仍然支持AUTH LOGIN
服務器,它可以通過設置TIdSMTP.AuthType
到satDefault
(以及可選地設定TIdSMTP.ValidateAuthLoginCapability
爲False如果服務器支持AUTH LOGIN
但響應於EHLO
命令不會報告的話)使用,然後在填充TIdSMTP.UserName
和TIdSMTP.Password
屬性,或者通過在TIdSMTP.SASLMechanisms
集合中包含TIdSASLLogin
組件。
UseVerp
and UseNagle
與安全無關。 VERP
是一個SMTP擴展,用於檢測由於無法投遞的錯誤而導致的彈出電子郵件。 Nagle是用於優化網絡數據包的網絡算法。
感謝您的好評! –
很好的回答!將此添加到我的書籤。 –
@Remy Lebeau你沒有提到'UseTLS = utRequireTLS',那個選項到底做了什麼? –