2012-05-08 57 views
5

我正在使用indy組件在delphi應用程序中實現電子郵件。我特別使用TidSMTP組件。我需要有效支持所有主要的電子郵件服務器。我使用Mozilla Thunderbird作爲我的電子郵件客戶端,並將smtp屬性與TidSMTP組件中的屬性進行比較。我試圖找到描述TidSMTP屬性之間關係的文檔,但一直未能弄清楚。SMTP Indy組件的安全性和身份驗證屬性有什麼作用?

有人能解釋如何將這些比較和他們做了什麼:

  • 在雷鳥:連接安全:(無,STARTTLS,SSL/TLS)。
  • 在TidSMTP.UseTLS(utNoTLSSupport,utUseImplicitTLS,utUseRequireTLS,utUseExplicitTLS)

  • 在雷鳥:認證方法:(無認證,正常密碼,加密的口令,Kerberos的/ GSSAPI,NTLM)

  • 在TidSMTP (用戶名,密碼,使用身份驗證方法)

我還看到其他TidSMTP屬性:UseEhlo,UseVerp,UseNagle。我需要使用這些嗎?他們在做什麼?

回答

15

使用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.AuthTypesatSASL然後填寫TIdSMTP.SASLMechanisms收集在你想要在你的應用程序支持的算法單獨TIdSASL衍生成分點。印有天然SASL組件DIGEST-MD5CRAM-MD5CRAM-SHA1NTLM(實驗),ANONYMOUSEXTERNALOTPPLAINSKEY,和LOGIN(SASL包裝器AUTH LOGIN)。如果您需要其他算法(例如Kerberos或GSSAPI),則必須編寫自己的TIdSASL衍生組件。對於使用用戶名/密碼的算法,必須將值分配給單獨的TIdUserPassProvider組件,然後將其分配給SASL組件(TIdSMTP.UserNameTIdSMTP.Password屬性不用於SASL)。您支持的SASL算法越多,您將能夠支持的服務器數量越多。

對於仍然支持AUTH LOGIN服務器,它可以通過設置TIdSMTP.AuthTypesatDefault(以及可選地設定TIdSMTP.ValidateAuthLoginCapability爲False如果服務器支持AUTH LOGIN但響應於EHLO命令不會報告的話)使用,然後在填充TIdSMTP.UserNameTIdSMTP.Password屬性,或者通過在TIdSMTP.SASLMechanisms集合中包含TIdSASLLogin組件。

UseVerp and UseNagle與安全無關。 VERP是一個SMTP擴展,用於檢測由於無法投遞的錯誤而導致的彈出電子郵件。 Nagle是用於優化網絡數據包的網絡算法。

+0

感謝您的好評! –

+0

很好的回答!將此添加到我的書籤。 –

+0

@Remy Lebeau你沒有提到'UseTLS = utRequireTLS',那個選項到底做了什麼? –

相關問題