Newsgroup: it.comp.lang.delphi
Titolo: [D7][INDY 9.00.10] Invio Mail SMTP SSL/TSL

Ciao a tutti,
 
come al solito devo correre dietro al mio unico cliente ( cognato ) il quale, tramite suo fratello sistemista ha deciso di mettere il server mail sul cloud, tra parentesi dall'oggi al domani.
Chiaramente dopo varie preghiere inviate gentilmente a mio cognato mi sono messo subito all'opera.
Purtroppo come già da tempo a questa parte tutti utilizzano la cifratura SSL/TLS ( vedi gmail ) di conseguenza la mia parte che utilizza l'invio normale via SMTP tramite Indy 9 non funziona più.
Ho passato tutta la mattina a cercare sul forum ed ho trovato alcuni thread che parlavano di questo, solo che alcuni non riuscivano, altri avevano Indy 10, e così via.
Quello che vorrei chiedervi è se qualcuno che ha D7 e Indy 9 ( come da oggetto ) riesce a mandare le mail vis SMTP tramite SSL/TLS, se si, potrebbe gentilmente dare qualche indicazione in merito ? Ho letto anche che occorre scaricare delle DLL ( OpenSSL ).
Io nel mio piccolo ho provato a mettere su una form 2 componenti : TIdSMTP e TIdSSLIOHandlerSocket e legarli insieme ma non so che parametri inserire nel secondo.
Eventualmente, secondo voi, dovrei passare a Indy10 per avere la certezza che il tutto funzioni o qualche anima pia mi conferma che anche con la 9 vado tranquillo ?
 
Un ringraziamento sentito a tutti quanti.
 
Ciao da Enrico Giudici c/o Anthelios.

Ciao Enrico,
   non so quanto lavoro richieda .... ma visto e consderato che Embarcadero 
rilascia la versione Community ... passa dal buon caro D7 al 10.3.1
Per quanto riguarda l'email fino ad oggi, eccetto una prova a buon fine con 
dropbox e i componenti tms, non ho ancora affrontato il problema delle email 
su cloud.
Sicurezza a parte che la puoi sistemare in poco tempo, credo che la parte 
piu' insidiosa sia lato cloud.
Comunque, nel mio programma mando un'email a chi di dovere via yahoo, dove 
si usano questi protocolli.
Hai bisogno di due dll, preferibilmente nella directory del programma: 
libeay32.dll e ssleay32.dll, i componenti necessari li hai gia' individuati 
(in realta' ti mancherebbe il componente per il messaggio).
Potendo, e' consigliabile utilizzare le versioni piu' aggiornate .... quindi 
passerei alle ultime indy.
 
Ciao
 
Daniele
 
 

 
 
Infatti è una mia attività in cantiere appena mio cognato sgancia il grano.
 
Ti ringrazio moltissimo per le dritte ed il supporto.


Ciao,
l'invio di una mail può essere fatto utilizzando Indy senza problemi.
Io utilizzo la versione 10, ma non credo ci siano particolari differenze con la versione 9.
 
Puoi iniziare con l'invio senza autenticazione verso un server che lo consente, poi aggiungerai la gestione dell'autenticazione.
 
Io ho parametrizzato il tutto, in modo che a seconda di quale server SMTP mi devo collegare posso utilizzare gestioni specifiche.
 
Per quanto riguarda le dll (libeay32.dll e ssleay32.dll) ci devono essere nell'installazione e qui forse sta un po' il problema... devono corrispondere alla versione prevista da Indy...

 Per quanto riguarda le dll (libeay32.dll e ssleay32.dll) ci devono essere nell'installazione e qui forse sta un po' il problema... devono corrispondere alla versione prevista da Indy...
 
Speriamo bene di trovare quelle giuste.
 
Ti ringrazio molto.


Forse ti può aiutare questo pezzo di codice...
 
Tieni presente che eseguo queste operazioni su un componente derivato da TIdMail
 
  TMyIdMail = class( TIdSmtp )
 
mentre RecMail è un mio record di appoggio che tiene tutti i parametri per l'invio della mail
 
 
 
 
 { --- Autenticazione Tls & GMail --- }
  if RecMail.AuthMode in (MailAuthMode_Tls + MailAuthMode_Ssl + MailAuthMode_Gmail + MailAuthMode_ArubaPec)
    then begin
     { --- Aggiunte --- }
      IOHandler := IdSSLIOHandlerSocketOpenSSL;
 
     { --- Modalità di Autenticazione Implicita / Esplicita --- }
      if RecMail.AuthMode in (MailAuthMode_Ssl + MailAuthMode_ArubaPec)
        then UseTLS := utUseImplicitTLS
        else UseTLS := utUseExplicitTLS;
 
     { --- SSL --- }
      if IdSSLIOHandlerSocketOpenSSL <> Nil
        then begin
          IdSSLIOHandlerSocketOpenSSL.Destination := RecMail.SmtpHost + ':' + Str000(RecMail.SmtpPort);
          IdSSLIOHandlerSocketOpenSSL.Host := RecMail.SmtpHost;
          IdSSLIOHandlerSocketOpenSSL.Port := RecMail.SmtpPort;
 
         { --- Opzioni Autenticazione --- }
          case RecMail.AuthMode of
           // Tls
            maTls:      IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1;
            maTlsv1:    IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1;
           {$ifdef DelphiXEN}
            maTlsv1_1:  IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1_1;
            maTlsv1_2:  IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1_2;
           {$else}
            maTlsv1_1:  IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1;
            maTlsv1_2:  IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1;
           {$endif}
 
           // Ssl
          //maSsl:      IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1;
            maSsl:      IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvSSLv23;
            maSslv2:    IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvSSLv2;
            maSslv23:   IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvSSLv23;
            maSslv3:    IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvSSLv3;
 
           // Gmail
            maGmail:    IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1;
 
           // Aruba Pec
            maArubaPec: IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvSSLv23;
          end;
          IdSSLIOHandlerSocketOpenSSL.SSLOptions.Mode := sslmUnassigned;
          IdSSLIOHandlerSocketOpenSSL.SSLOptions.VerifyMode := [];
          IdSSLIOHandlerSocketOpenSSL.SSLOptions.VerifyDepth := 0;
        end;
    end;

 Forse ti può aiutare questo pezzo di codice...
 
Intanto ti ringrazio moltissimo per l'aiuto ed il codice postato. Per il momento sto seguendo la strada che dicevo nei post precedenti, sembra che ho problemi con le 2 dll ( libeay32.dll e ssleay32.dll ) indicate da Daniele, all'inizio l'errore indicava "Not load OpenSSL", guardando in giro sembra che sia un problema di versione, su un sito ho trovato le dll ma c'e' ne una marea. Adesso devo solo trovare quelle giuste.
 
Un grazie ancora da parte mia.
 
Ciao da Enrico Giudici c/o Anthelios.

Ciao Enrico,
  ho trovato questo link
 
https://stackoverflow.com/questions/22050325/indy-10-idsmtp-connect-raising-could-not-load-ssl-library
 
 
C'e' una parte dove rimandano ad un sito per il download delle ssl
 
Di problemi ce ne sono diversi, ed e' per questo che ancora coesiste il buon 
vecchio delphi Seattle proprio perche' il mio programma utilizza l'invio di 
email tramite yahoo che implementa quei protocolli.
Nel mio caso ho la versione 10 di Indy (non so se e' la 10.0.52 o simili) e 
funziona senza problemi con i settaggi che ti ha inviato Alessandro.
 
A titolo personale, e' il caso di avere le email in un db su cloud? (per i 
protocolli ssl non cambia niente ... dato che yahoo, google ecc.. li hanno 
implementati).
 
Ciao
 
Daniele 
 

 
 
Purtroppo non me ne occupo io di problematiche sistemistiche visto che in quel campo sono una capra, con tutto il rispetto per le capre. E' una scelta che hanno fatto insieme mio cognato con suo fratello sistemista. Infatti come giustamente dici tu non cambia nulla rispetto a gmail e/o yahoo.
 
Ciao e grazie ancora da Enrico Giudici c/o Anthelios

Intanto devo fare un doveroso ringraziamento a Daniele e Alessandro per il supporto e la sopportazione.
 
Dopo numerosi tentativi sono riuscito a trovare le dll corrette ( ma che fatica ), sono riuscito tramite la porta 465 ad accedere a gmail via SSL cosa che prima non riuscivo, nonostante un passo avanti ( in futuro potrà servirmi ) non era questo l'obbiettivo.
Non riesco ancora a connettermi con la porta 587 via TLS al server di posta ( cloud ) di mio cognato, anche perchè gli esempi proposti da Daniele ed Alessandro fanno riferimento alla versione 10 di Indy.
A questo punto me tocca passare anch'io alla fatidica 10, domanda : senza passare per il momento ad una versione di delphi che la comprende sapete per cortesia dove scaricare la trial per vedere se funzia prima di acquistarla ?
A questo link : 
https://www.indyproject.org/download/v10/
 si può scaricare solo la documentazione ma non la trial.
 
Ciao e grazie da Enrico Giudici c/o Anthelios

 
 
Se non ho capito male la libreria indy è gratuita.
 
Ciao.

 Se non ho capito male la libreria indy è gratuita.
 
pensavo fosse acquistabile anche a parte senza acquistare Delphi.
 
Sai per caso darmi il link dove scaricarla dato che nel link ufficiale non riesco a trovarla ?


 e poi ancora "Develpment 
Snapshot" sulla pagina che verrà dopo fino al link "Fulgan"
 
Ciao.

Ciao Enrico,
  il server mail e' proprietario ??
Se si, devi farti dire da chi lo ha progettato le varie informazioni 
tecniche che ti sono necessarie per il collegamento.
A questo punto non darei troppo per scontato che i settaggi di gmail o yahoo 
possano andar bene anche per quello.
 
Poi dicci come ti sta andando !!!
 
Ciao
 
Daniele 
 

 Snapshot" sulla pagina che verrà dopo fino al link "Fulgan"
 
ti ringrazio moltissimo, appena torno in ufficio la scarico subito, devo però vedere come disinstallare la 9 bene per non avere problemi di sorta.
 
Ciao e grazie da Enrico Giudici c/o Anthelios.

 Poi dicci come ti sta andando !!!
 
purtroppo, sempre il fratello di mio cognato mi ha detto che devo collegarmi tramite la porta 587 e TLS, di conseguenza la 465 SSL di gmail non va bene.
 
A questo punto mi butto sulla 10 di Indy così dovrei risolvere tutti i miei problemi, e poi grazie al tuo preziosissimo supporto tramite il codice che mi hai postato non dovrei avere problemi.
 
Ciao e grazie da Enrico Giudici c/o Anthelios.

Ciao,
con i vari test che ho fatto io non è un grosso problema se usi TLS e la porta 587...
 
Cambia solo che con TLS l'inizio della transazione con il server di posta è in chiaro e poi passa a criptata.
 
Con SSL invece tutta la transazione con il server è criptata.
 
Spesso i server che utilizzano il TLS mantengono anche ancora attiva la porta 25, dove la transazione avviene tutta in chiaro. Magari puoi fare delle prove anche con questa (senza TLS e SSL)
 
Riassumendo devi impostare la modalità indicata dai parametri di connessione per dar modo all'applicazione di connettersi e dialogare correttamente con il server di posta
 
Io ho sempre usato la versione 10 di Indy, quindi riesco a darti suggerimenti solo su questa.
 
Ciao

> mi ha detto solo che la posta è sul cloud
 
Se utilizzi 
mxtoolbox.com
 puoi fare un test (Diagnostics) del server di posta e forse acquisire qualche altra informazione
 

 Io ho sempre usato la versione 10 di Indy, quindi riesco a darti suggerimenti solo su questa.
 
grazie lo stesso, sei stato gentilissimo.


 Se utilizzi 
mxtoolbox.com
 puoi fare un test (Diagnostics) del server di posta e forse acquisire qualche altra informazione
 
grazie lo stesso ma c'e' un risvolto, dietro vostro supporto ho scaricato la versione 10 di Indy, ero ultra convinto che era a pagamento.
 
Ora mi trovo ad un bivio, disinstallare la 9 e mettere la 10, mi preoccupa un pò perchè ho sempre paura di combinare guiai, oppure, ho scaricato la trial della libreria Clevert Internet Suite, provata ed in pochi minuti risolto il problema, semplice da utilizzare, assomiglia molto a Indy come componenti e metodi/proprietà per cui non c'e' molto da lavorare, unico problema il prezzo. Sinceramente, lo so, sono pigro, non me la sento di disintallare la 9 e mettere la 10, faccio cacciare i soldi a mio cognato e uso Clever Internet Suite, dato che lavoro gratis ho il diritto di avere dei componenti aggiornati.
 
P.S.
Sto ancora aspettando che mi compri l'upgrade all'ultima versione di Delphi, sarà qualche anno che ne stiamo parlando.
 
Vediamo come va a finire.


Ciao,
io resterei su Indy, visto che prima o poi passerai all'aggiornamento di Delphi e ti ritroverai Indy di serie
 
Domanda: in quale versione stai lavorando ora?
Prima o dopo Delphi 2007?

 Prima o dopo Delphi 2007?
 
Purtroppo sono ancora al palo con Delphi 7, primo e unico tool che mio cognato ai tempi paleolitici mi ha comprato dopo avergli rotto le scatole per non so quanto tempo.


Considera allora un problema non banale nel passaggio alle versioni successive.
 
L'ultima versione di Delphi che non gestiva Unicode è stata la 2007.
Dopo quella, tutte hanno Unicode nativo...
 
Sono anni che sto modificando il codice per poter passare alla nuova versione. Al momento credo di essere al 70% di adeguamento con il progetto principale.
 
Utilizzo le nuove versioni per moduli che utilizzo in parallelo.
 
Solo per farti capire un semplice problema: da sempre ho "giocato" con le stringhe per risolvere i problemi che incontravo.
Ora le stringhe hanno caratteri con dimensione più di un carattere...
 
Ciao

Ciao Alessandro,

infatti è anche una mia grande preoccupazione, ancora di più adesso che mi dici che sono anni che ci stai addietro.
 
Intanto vediamo come vanno le cose, adesso la massima priorità e mandare le mail tramite cloud dato che a breve il sistemista ( suo fratello ) deve dismettere il vecchio server visto che ha il disco full.


Ciao Enrico,
   in tono molto amichevole ti suggerisco (ma sarebbe meglio dire che 
saresti obbligato) di passare alla 10.3.1.
Il prezzo non e' trascurabile, come non e' trascurabile tutto quello che ci 
trovi dentro.
Per aggirare il problema dell'acquisto con il relativo costo dipende dalle 
versioni, comunque il suggerimento e' quello di stabilizzarti sulla 
Entrprice.
Per chi, per diversi motivi non puo' fare un investimento iniziale non 
indifferente, Embarcadero ha proposto una versione GRATUITA che si chiama 
COMMUNITY.
La differenza tra COMMUNITY ed ENTRPRICE riguarda l'installazione di alcune 
librerie.
Nella tua situazione, oggi, installerei la community e poi decidi.
 
Ciao
 
Daniele
 

Ciao Daniele,

mio cognato è già al corrente dei prezzi, io gli avevo proposto la versione PRO che mi sembra un giusto compromesso.
 
Dietro tuo consiglio proverò a scaricare la COMMUNITY.
 
Domanda : con la versione COMMUNITY è possibile installare componenti di terze parti ?
 
Ciao e grazie da Enrico Giudici c/o Anthelios.
 

>
Si li puoi installare, senza limitazioni, per molti basta andare su 
Tools->GetIt Package Manager e cercare il componente che serve.
 
A questo c'e' un'eccezione ... le Librerie Jedi , senza una precedente 
versione precednete di Delpi con le Jedi installate, non si installano 
su Rio 10.3.
 
Cerca /bin/jediinstaller, ho provato anche a copiare a mano il file
jediiinstallaer.exe su
C:\Program Files (x86)\Embarcadero\Studio\20.0\bin.
 
Per il resto la Community e' completa.

 C:\Program Files (x86)\Embarcadero\Studio\20.0\bin.
 
Ecco il punto più importante, io utilizzo moltissimo le Jedi, scusami ma non ho capito cosa intendi con "senza una precedente versione di Delphi", la mia situazione è questa :
Delphi 7 acquistato installato su un vecchio portatile.
Delphi Community vorrei installarlo sul portatile più recente di mio cognato sperando me lo sbologni.
 
A questo punto come mi devo comportare con le Jedi ? Riesco ad installarle oppure no ?
 
Un grazie sentito da parte mia.


>
se hai solo Delphi 10.3 su un pc non ci riesci, a me ha chiesto di 
installare Framework 3.5 , fatto queso dopo non c'e' stato comunque 
verso di installare le Jedi,  anche eseguendo i batch a mano.
 
[Compiling installer...]
Missing dependencies for Embarcadero RAD Studio 10.3
  - JCL  is required but not installed. 
(
https://github.com/project-jedi/jcl
)
 
No Delphi/BCB/BDS/RAD-Studio versions was found that has the required
dependencies installed. Please install the dependencies first.
 
se hai una versione precedente (non ho provato con versioni come la D7, 
verifica se riesci ad installare le Jedi piu' recenti), installi le 
Jedi, successivamente installi Delphi 10.3 e dal pannello GeiIt 
installerai le Jedi.
 
Maurizio
 

Aggiornamento Jedi su Rio 10.3 senza altre verxsioni Delphi
 
si riesce a fare , penando un po' ......
 
copia la versione piu' recente di jediinstaller.exe su
 
C:\Program Files (x86)\Embarcadero\Studio\20.0\bin
 
1) Installare Net Frameword 3.5, prima di avviare le Jedi
2) Tools-GetIt Package
3) cerca Jedi
4) avvia JVCL 3.1
- sembra che vada , ma non appare la finestra di compliazione Jedi
- verifica nella toolbar di Windows, e' facile ci siano 2 incone Delphi
controlla una di queste permette di avviare la compilazione di JCL
 
5) scegli JVCL Install
6) anche qui stessa cosa, verifica la presenza di icone nella toolbar 
Windows
avrai avvisi di compatibilita' JVCL 2.8 , non interrompono la complilazione.
7) a fine installazione riparte autonomamente per aggiornare JCL
 
a questo punto le Jedi sono installate
 
dovrai andare su Delphi Tools->Option->Language->Delphi-Options->Library
(i menu sono cambiati rispetto le versioni precedenti)
dovrai come sempre aggingere i path delle Jedi
 
per i sorgenti
 
C:\Users\<utente>\Documents\Embarcadero\Studio\20.0\CatalogRepository\JEDIVisualComponentLibraryJVCL-3.6\run
 
C:\Users\<utente>\Documents\Embarcadero\Studio\20.0\CatalogRepository\JEDIVisualComponentLibraryJVCL-3.6\devtools\JvExVCL
 
per i file inc
 
C:\Users\<utente>\Documents\Embarcadero\Studio\20.0\CatalogRepository\JEDIVisualComponentLibraryJVCL-3.6\common
 
Ripeti l'operazione per Win32 e Win64
 
Dopo tutto andra' perfetto, ho riaperto un progetto che usa le Jedi e
nessun problema.
 
Non scoraggiarti,  un po' di pazienza e le Jedi le metti.
 
Avevo provato altre volte, senza riuscire, il dubbio mi e' venuto 
facendo Unistall, e' comparsa la schermata di installazione Jdi win32 
Win64, allora ho vist le icone nella toolbar.
 
spero di esserti stato d'aiuto.
 
Maurizio

 spero di esserti stato d'aiuto.
 
sei stato gentilissimo e preziosissimo come sempre e non so come ringraziarti se non con questo post.
 
Appena sistemo il discorso delle mail pianifico l'attività di porting sulla nuova versione di delphi community anche se sono molto preoccupato per il lavoro da fare, tra unicode, componenti etc. Ma vediamo una cosa alla volta.
 
Ciao e un enorme ringraziamento da parte mia.
 
Enrico Giudici c/o Anthelios.