Newsgroup: it.comp.lang.delphi
Titolo: Supporto tls

Salve,
con un gestionale invio posta certificata tramite 
legalmail.it
 
Dal 1° di luglio c.a. legalmail(posta certificata) richiede il supporto tls 1.2.
Mentre con gmail e altri account che usano tls non ho problemi, con il suddetto account non riesco ad inviare, pur non avendo segnalazione di errore.
qualcuno usa legalmail e mi può dare una mano?
grazie Giovanni.


Dimenticavo di indicare che uso delphiXE e le indy 10.6

Ciao,
  prova a leggere in questi post ...
 
http://codeverge.com/embarcadero.delphi.intraweb/how-to-upgrade-to-tls-1.2/2033505
 
https://forums.embarcadero.com/thread.jspa?threadID=115965
 
https://stackoverflow.com/questions/37809971/using-indy-10-idhttp-with-tls-1-2
 
 
Ciao
 
Daniele
 
 


Grazie per la risposta,
avevo già visto quei post.. ma non ho risolto, non capisco cosa mi sfugge,
tutti gli altri account i posta funzionano benissimo, sto impazzendo da ormai 4 giorni.
ciao.
 

 tutti gli altri account i posta funzionano benissimo, sto impazzendo da ormai 4 giorni.
 
la butto lì, anch'io ho avuto problemi con il cambio di gestore di posta elettronica, adesso mio cognato ha il server in cloud e con il protocollo TLS.
 
Con il componente che utilizzo ( clever internet suite, fortunatamente mio cognato ha sganciato il grano ) ho dovuto lavorare su una proprietà, adesso non ricordo bene come si chiama ma appena torno in ufficio te lo dico, qualcosa come Implicit/Explicit/Automaitic, una di queste poi ha funzionato, sicuramente non era Automatic.
 
Adesso non so quale componente utilizzi ma anche le Indy avevano questa proprietà.
 
Ciao da Enrico Giudici c/o Anthelios.
 


Non c'è proprio nessuno che abbia una soluzione al problema?
Scusate l'insistenza ma... sono bloccato e non so che pesci pigliare,
Giovanni

Il giorno mercoledì 3 luglio 2019 19:33:29 UTC+2, 
1gio...@gmail.com
 ha scritto:

Nel componente IdSSLIOHandlerSocketOpenSSL aggiungi o modifica
IdSSLIOHandlerSocket.SSLOptions.SSLVersions := [sslvSSLv2, sslvSSLv23, sslvSSLv3, sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2]; oppure
usa questa funzione
 
function NewInviaEmail6(const da: string; const destinatario: string;
                        const hostmail: string; const oggetto: string;
                        const corpo: string; const utente: string;
                        const lapassword: string; Fileallegato: String;
                        porta: word; tipossl: string) :boolean;
var
  IdSSLIOHandlerSocket: TIdSSLIOHandlerSocketOpenSSL;
  IdSMTP1: TIdSMTP;
  IdMessage: TIdMessage;
  idUserPassProvider: TIdUserPassProvider;
  idSASLLogin: TIdSASLLogin;
  Attachment: TIdAttachment;
  i: Integer;
begin
  try
    result := true;
    IdSSLIOHandlerSocket := TIdSSLIOHandlerSocketOpenSSL.Create;
    IdSSLIOHandlerSocket.SSLOptions.Mode  := sslmClient;
    if tipossl = 'N' then
      IdSSLIOHandlerSocket.SSLOptions.Method := sslvTLSv1_2;
    if tipossl = 'S' then
      IdSSLIOHandlerSocket.SSLOptions.Method := sslvSSLv23;
    IdSSLIOHandlerSocket.SSLOptions.SSLVersions := [sslvSSLv2, sslvSSLv23, sslvSSLv3, sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];
    IdSMTP1 := TIdSMTP.Create;
    idSMTP1.IOHandler := IdSSLIOHandlerSocket; 
    idSMTP1.Host := hostmail;
    idSMTP1.Port := porta;
    if tipossl = 'N' then
      idSMTP1.UseTLS := utUseExplicitTLS;
    if tipossl = 'S' then
      idSMTP1.UseTLS := utUseImplicitTLS;
    idSASLLogin := TIdSASLLogin.Create(idSMTP1);
    idUserPassProvider := TIdUserPassProvider.Create(idSASLLogin);
    idUserPassProvider.Username := utente;
    idUserPassProvider.Password := lapassword;
 
    idSASLLogin.UserPassProvider := idUserPassProvider;
 
    idSMTP1.AuthType := satSASL;
    idSMTP1.SASLMechanisms.Add.SASL := idSASLLogin;
    IdMessage := TIdMessage.Create;
    IdMessage.ContentType := 'text/plain';
    IdMessage.Charset := 'UTF-8';
    IdMessage.From.Address := da;
 
IdMessage.From.Name
 := da;
    IdMessage.ReplyTo.EMailAddresses := IdMessage.From.Address;
    IdMessage.Recipients.Add.Text := destinatario;
    IdMessage.Subject := oggetto;
    IdMessage.Body.Text := corpo;
    if (Fileallegato > '') then
      Attachment := TIdAttachmentFile.Create(IdMessage.MessageParts, Fileallegato);
    try
      idSMTP1.Connect;
      try
        idSMTP1.Authenticate;
        idSMTP1.Send(IdMessage);
      finally
        idSMTP1.Disconnect;
      end;
    except
      result := False;
    end;
  finally
    IdMessage.Free;
    idUserPassProvider.Free;
    idSASLLogin.Free;
    IdSSLIOHandlerSocket.Free;
    idSMTP1.Free;
  end;
end;

 
Ciao Paolo.. 
Grazie per la risposta, ma purtroppo continua a non funzionare,
ho usato il tuo codice tale e quale (che è simile a quello che uso), ti posto il codice con il punto in cui fallisce (non fa l'atenticazione, senza alcuna indicazione di errore :
 
function NewInviaEmail6(const da: string; const destinatario: string;
                        const hostmail: string; const oggetto: string;
                        const corpo: string; const utente: string;
                        const lapassword: string; Fileallegato: String;
                        porta: word; tipossl: string) :boolean;
var
  IdSSLIOHandlerSocket: TIdSSLIOHandlerSocketOpenSSL;
  IdSMTP1: TIdSMTP;
  IdMessage: TIdMessage;
  idUserPassProvider: TIdUserPassProvider;
  idSASLLogin: TIdSASLLogin;
  Attachment: TIdAttachment;
  i: Integer;
begin
  try
    result := true;
    IdSSLIOHandlerSocket := TIdSSLIOHandlerSocketOpenSSL.Create;
    IdSSLIOHandlerSocket.SSLOptions.Mode  := sslmClient;
    if tipossl = 'N' then  //<--------
      IdSSLIOHandlerSocket.SSLOptions.Method := sslvTLSv1_2;
    if tipossl = 'S' then
      IdSSLIOHandlerSocket.SSLOptions.Method := sslvSSLv23;
    IdSSLIOHandlerSocket.SSLOptions.SSLVersions := [sslvSSLv2, sslvSSLv23, sslvSSLv3, sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];
    IdSMTP1 := TIdSMTP.Create;
    idSMTP1.IOHandler := IdSSLIOHandlerSocket;
    idSMTP1.Host := hostmail; //
sendm.cert.legalmail.it
 
    idSMTP1.Port := porta;  // 465 /25 /587
    if tipossl = 'N' then  //<-------------
      idSMTP1.UseTLS := utUseExplicitTLS;
    if tipossl = 'S' then
      idSMTP1.UseTLS := utUseImplicitTLS;
    idSASLLogin := TIdSASLLogin.Create(idSMTP1);
    idUserPassProvider := TIdUserPassProvider.Create(idSASLLogin);
    idUserPassProvider.Username := utente;
    idUserPassProvider.Password := lapassword;
 
    idSASLLogin.UserPassProvider := idUserPassProvider;
 
    idSMTP1.AuthType := satSASL;
    idSMTP1.SASLMechanisms.Add.SASL := idSASLLogin;
    IdMessage := TIdMessage.Create;
    IdMessage.ContentType := 'text/plain';
    IdMessage.Charset := 'UTF-8';
    IdMessage.From.Address := da;  //***@
legalmail.it
 
 
IdMessage.From.Name
 := da;   // ***@
legalmail.it
 
    IdMessage.ReplyTo.EMailAddresses := IdMessage.From.Address; // Null
    IdMessage.Recipients.Add.Text := destinatario; //*** @
tiscali.it
 
    IdMessage.Subject := oggetto; // bla bla
    IdMessage.Body.Text := corpo;  // Bla Bla
    if (Fileallegato > '') then  // ''
      Attachment := TIdAttachmentFile.Create(IdMessage.MessageParts, Fileallegato);
    try
      idSMTP1.Connect;
      try
        idSMTP1.Authenticate;   // <---------- FALLISCE
        idSMTP1.Send(IdMessage);
      finally
        idSMTP1.Disconnect;
      end;
    except
      result := False;
    end;
  finally
    IdMessage.Free;
    idUserPassProvider.Free;
    idSASLLogin.Free;
    IdSSLIOHandlerSocket.Free;
    idSMTP1.Free;
  end;
end;
 
N.B.Sono sicuro che i dati di login sono esatti, poiché prima della richiesta del tls 1.2 si collegava tranquillamente.
Giovanni

Devi usare tipossl uguale S

Scusa specifico la variabile tipossl la uso con le specifiche del server di posta.
Legalmail usa SSL e  porta 465 o 25
Altri server di posta usano TLS e porta 587 e per ma la prima e S mentre la seconda N


Purtroppo sono prove che ho già fatto, (e appena ripetute)
non cambia nulla.
Non riesco proprio a capire cosa non va.
Devo assolutamente risolvere e sto impazzendo. 
 

Se hai provato e non funziona sembra che le librerie ssl che usi sono obsolete.
Devi utilizzare la 1.0.1.h, ma meglio 1.0.1.s

 Devi utilizzare la 1.0.1.h, ma meglio 1.0.1.s
 
Uso la 10.6.2.5336 incorporate in Delphi Tokyo

Bene ma devono le librerie ssl.

 Bene ma devono le librerie ssl.
 
Ok.. ma non sono la stessa versione?
 

La funzione ti assicuro non ha problemi, quale librerie ssl usi?
Ti servono da 1.0.1h in poi.

No, devono essere aggiornate

 Ti servono da 1.0.1h in poi.
 
Scusa la mia ignoranza.. ma le librerie ssl incorporate non sono tutte la stessa versione? 10.6.2.5366.
eventualmente come definisco la versione in uso? 
 

Non vanno bene con il server ssl che usa tls1.2

 Non vanno bene con il server ssl che usa tls1.2
 
Ok Allora devo scaricare la versione 10.0.1s?
 
Non è che avresti il link?
 

Scrivo dal cellulare. Li trovi dal sito indyproject

 Scrivo dal cellulare. Li trovi dal sito indyproject
 
OK nel frattempo ho scaricato la versione 10.o.2s
scarico faccio installo e provo.
Sei gentilimmo grazie.
Pubblicherò comunque l'esito.
ciao Giovanni.
 

Non devi definire nessuna versione metti le ddl nella cartella dell'eseguibile e hai finito.

 Non devi definire nessuna versione metti le ddl nella cartella dell'eseguibile e hai finito.
 
EUREKA!!!!
Proprio non ho pensato che potesse essere la versione delle ssl, 
ero convinto di avere una versione avenzata.. ma non era così.
Paolo se tu fossi nei pressi di Torino sarei lieto di offrirti un caffè.
In ogni caso ti anticipo un grazie grosso come una casa, per la tua gentilezza e disponibilità.
Ciao Giovanni.