2012-05-08 28 views
5

私はindyコンポーネントを使ってdelphiアプリケーションで電子メールを実装しています。私は特にTidSMTPコンポーネントを使用しています。私は効果的にすべての主要な電子メールサーバーをサポートする必要があります。 Mozilla Thunderbirdをメールクライアントとして使用し、smtpプロパティとTidSMTPコンポーネントのプロパティを比較しています。私はTidSMTPのプロパティ間の関係を記述したドキュメントを見つけようとしましたが、それを理解することはできませんでした。SMTP Indyコンポーネントのセキュリティと認証のプロパティは何をしますか?

誰かが、これらは比較する方法と、彼らが何をすべきか説明できます:サンダーバードで

  • :接続セキュリティ:(なし、STARTTLS、SSL/TLS)。サンダーバードでTidSMTP.UseTLS(utNoTLSSupport、utUseImplicitTLS、utUseRequireTLS、utUseExplicitTLS)

  • :認証方式(認証なし、通常のパスワード、暗号化されたパスワード、ケルベロス/ GSSAPI、NTLM)

  • TidSMTPで(ユーザー名、パスワード、useAuthenticationメソッド)

他のTidSMTPプロパティも参照してください。UseEhlo、UseVerp、UseNagle。これらを使用する必要がありますか?彼らは何をしますか?

答えて

15

STARTTLSを使用している場合、サーバーのリスニングポートは、最初は接続時に暗号化されません。クライアントが接続すると、サーバがサポートしていれば、サーバにオプションのSTARTTLSコマンドを送信して、その時点でSSL/TLSハンドシェークを動的に実行することができます。これにより、従来の非SSL/TLSクライアントは同じポートに接続を継続でき、新しいSSL/TLS対応のクライアントはSSL/TLSを使用できるようになります。 IndyのUseTLS=utUseExplicitTLSに相当します。 をTrueに設定してUseTLS=utUseExplicitTLSを使用する必要があります。EHLOコマンドは、サーバがSTARTTLSコマンドをサポートしているかどうかを検出する方法であるため、TIdSMTPが検出されます。

STARTTLSの代わりにSSL/TLSを使用する場合、サーバーのリスニングポートは常に暗号化を使用しており、クライアントは接続時に直ちにSSL/TLSハンドシェイクを開始して他のデータを交換する必要があります。 IndyのUseTLS=utUseImplicitTLSに相当します。使用されるコマンドはSTARTTLSではありません。実装されているSASLベースのハッシュ/暗号化アルゴリズム(ケルベロス、GSSAPI、NTLMなどの元のSMTP仕様によって定義されている古い(及び非セキュア)AUTH LOGINコマンド、およびSMTPの拡張 - 認証のため

TIdSMTPは、2つのオプションがありSASLアルゴリズムとして)。 SASLを使用するには

は、satSASLTIdSMTP.AuthTypeを設定して、アプリでサポートしたいアルゴリズムに対して別々のTIdSASL由来のコンポーネントを指すようにTIdSMTP.SASLMechanismsコレクションで記入します。インディはDIGEST-MD5CRAM-MD5CRAM-SHA1NTLMのネイティブSASL成分(実験的)、ANONYMOUSEXTERNALOTPPLAINSKEY、及びLOGINAUTH LOGIN用SASLラッパー)を有しています。別のアルゴリズム(KerberosやGSSAPIなど)が必要な場合は、独自のTIdSASL由来コンポーネントを記述する必要があります。 Username/Passwordを使用するアルゴリズムの場合、値は別のTIdUserPassProviderコンポーネントに割り当てられ、次にSASLコンポーネントに割り当てられます(TIdSMTP.UserNameおよびTIdSMTP.PasswordのプロパティはSASLでは使用されません)。サポートするSASLアルゴリズムが多くなればなるほど、サポートできるサーバーの数は増えます。まだAUTH LOGINをサポートするサーバーの場合

、それはsatDefaultTIdSMTP.AuthTypeを設定する(必要に応じて、サーバがAUTH LOGINをサポートしていますが、EHLOコマンドに応答して、それを報告しない場合はFalseにTIdSMTP.ValidateAuthLoginCapabilityを設定)し、その後に充填しても使用することができますTIdSMTP.UserNameおよびTIdSMTP.Passwordのプロパティを使用するか、またはコレクションにTIdSASLLoginコンポーネントを含めることによって、

UseVerpUseNagleはセキュリティとは関係ありません。 VERPは、配信不能なエラーによる電子メールのバウンスを検出するSMTP拡張機能です。 Nagleは、ネットワークデータパケットを最適化するためのネットワーキングアルゴリズムです。

+0

偉大な答えをありがとう! –

+0

すばらしい答え!これを私のブックマークに追加する。 –

+0

@Remy Lebeauあなたは 'UseTLS = utRequireTLS'について言及していませんでした。 –

関連する問題