2012-05-08 7 views
5

Sto utilizzando i componenti di indy per implementare le e-mail in un'applicazione delphi. Sto specificatamente utilizzando il componente TidSMTP. Devo supportare in modo efficace tutti i principali server di posta elettronica. Io uso Mozilla Thunderbird come mio client di posta elettronica e sto confrontando le proprietà smtp con quelle nel componente TidSMTP. Ho tentato di trovare la documentazione che descrive la relazione tra le proprietà TidSMTP, ma non sono stato in grado di capirlo.Cosa fanno le proprietà di sicurezza e autenticazione dei componenti Indy SMTP?

qualcuno può spiegare come questi confrontano e cosa fanno:

  • In Thunderbird: Collegamento di sicurezza: (Nessuno, STARTTLS, SSL/TLS).
  • In TidSMTP.UseTLS (utNoTLSSupport, utUseImplicitTLS, utUseRequireTLS, utUseExplicitTLS)

  • In Thunderbird: Metodo di autenticazione: (nessuna autenticazione, normale password, password crittografata, Kerberos/GSSAPI, NTLM)

  • In TidSMTP (nome utente, password, con metodo useAuthentication)

Vedo anche altre proprietà TidSMTP: UseEhlo, UseVerp, UseNagle. Devo usare questi? Cosa fanno?

risposta

15

Quando si utilizza STARTTLS, la porta di ascolto del server non viene inizialmente crittografata al momento della connessione. Quando un client si connette, può inviare un comando opzionale STARTTLS al server, se il server lo supporta, per eseguire dinamicamente l'handshake SSL/TLS in quel momento. Ciò consente ai client legacy non-SSL/TLS di continuare a connettersi a quella stessa porta, consentendo ai nuovi client abilitati a SSL/TLS di utilizzare SSL/TLS, se disponibili sul server. Questo corrisponde a UseTLS=utUseExplicitTLS in Indy. È necessario impostare UseEHLO su True per utilizzare UseTLS=utUseExplicitTLS, in quanto il comando EHLO è il modo in cui TIdSMTP rileva se il server supporta o meno il comando STARTTLS.

Quando si utilizza SSL/TLS anziché STARTTLS, la porta di ascolto del server utilizza sempre la crittografia e il client deve avviare immediatamente l'handshake SSL/TLS al momento della connessione prima di poter scambiare qualsiasi altro dato. Ciò corrisponde a UseTLS=utUseImplicitTLS in Indy. Non è disponibile il comando STARTTLS.

Per l'autenticazione, TIdSMTP ha due opzioni - il vecchio (e non protetta) AUTH LOGIN comando che viene definito dalle specifiche SMTP originale, e le estensioni SMTP per gli algoritmi di hashing/crittografia SASL-based (Kerberos, GSSAPI, NTLM, ecc sono attuate come algoritmi SASL).

Per usare SASL, impostare TIdSMTP.AuthType-satSASL e quindi compilare la raccolta TIdSMTP.SASLMechanisms per puntare a diversi componenti TIdSASL -derived per gli algoritmi si desidera supportare nella vostra app. Indy ha componenti nativi SASL per DIGEST-MD5, CRAM-MD5, CRAM-SHA1, NTLM (sperimentale), ANONYMOUS, EXTERNAL, OTP, PLAIN, SKEY, e LOGIN (SASL wrapper per AUTH LOGIN). Se hai bisogno di un altro algoritmo (Kerberos o GSSAPI, ad esempio), dovrai scrivere il tuo componente originale TIdSASL. Per gli algoritmi che utilizzano nome utente/password, i valori devono essere assegnati a un componente separato TIdUserPassProvider che viene quindi assegnato ai componenti SASL (le proprietà TIdSMTP.UserName e TIdSMTP.Password non vengono utilizzate con SASL).Maggiore è il numero di algoritmi SASL supportati, maggiore è il numero di server che sarà in grado di supportare.

Per i server che ancora supportano AUTH LOGIN, esso può essere utilizzato sia impostando TIdSMTP.AuthType-satDefault (e facoltativamente impostazione TIdSMTP.ValidateAuthLoginCapability False se il server supporta AUTH LOGIN ma non lo segnala nella risposta al comando EHLO) e poi compilando il TIdSMTP.UserName e TIdSMTP.Password proprietà o includendo il componente TIdSASLLogin nella raccolta TIdSMTP.SASLMechanisms.

UseVerp e UseNagle non hanno nulla a che fare con la sicurezza. VERP è un'estensione SMTP per il rilevamento di messaggi rimbalzati a causa di errori non recapitabili. Nagle è un algoritmo di rete per l'ottimizzazione dei pacchetti di dati di rete.

+0

Grazie per l'ottima risposta! –

+0

Ottima risposta! Aggiungendo questo ai miei segnalibri. –

+0

@Remy Lebeau Non hai menzionato 'UseTLS = utRequireTLS', che cosa fa esattamente questa opzione? –

Problemi correlati