*.dll 64bit OpenSSL per Indy

di il
9 risposte

*.dll 64bit OpenSSL per Indy

Ciao,

è corretto che per inviare mails tramite SMTP è necessario il seguente?

  1. Integrare i componenti "TIdMessage", "TIdSMTP" e "TIdSSLIOHandlerSocketOpenSSL" e
  2. aggiungere nella cartella dell'eseguibile le dll "libcrypto.dll" (ex: libeay32.dll) e "libssl.dll" (ex: ssleay32.dll)-

Se corretto, dove consigliate scaricare in modo sicuro queste dll in versione 32bit e 64bit?

PS: Sulla pagina "https://wiki.openssl.org/index.php/Binaries" ci sono dei link, tra i quali ICS_Download, ma non so cosa sia ICS.

Grazie in anticipo,

Ale

9 Risposte

  • Re: *.dll 64bit OpenSSL per Indy

    Se non ricordo male, puoi scaricare le librerie da questo sito.

    Non ci lavoro da un po', perché utilizzo le classi basate sulle API native principalmente per HTTP(S), quindi ho la memoria labile per quanto riguarda Indy. :)

    16/03/2025 - al.delphi ha scritto:

    PS: Sulla pagina "https://wiki.openssl.org/index.php/Binaries" ci sono dei link, tra i quali ICS_Download, ma non so cosa sia ICS.

    Direi che si riferiscono a ICS (Internet Component Suite), un pacchetto di componenti simile a Indy (per certi versi) per la comunicazione tramite protocolli Internet.

  • Re: *.dll 64bit OpenSSL per Indy

    Grazie del link, Alka.

    Nell'intento di rendere facile la distribuzione proverò di estrapolare i files *.dll dall'Installer e di aggiungere il solo file *.dll32/64 alla cartella dell'eseguibile, come pare abbia funzionato in passato con il file ssleay32.dll.

    Sul PC di sviluppo i componenti Indy funzionano bene, a parte rari socket error quando si tenta di inviare quantità elevate di mails. : )

    Ale

  • Re: *.dll 64bit OpenSSL per Indy

    17/03/2025 - al.delphi ha scritto:

    Sul PC di sviluppo i componenti Indy funzionano bene, a parte rari socket error quando si tenta di inviare quantità elevate di mails. : )

    Quello potrebbe non essere un problema di Indy, ma del server che ti rifiuta gli invii massivi. :D

    Onestamente, al giorno d'oggi non mi appoggerei mai a un server SMTP per inviare un numero significativo di e-mail, fossero anche per newsletter o notifiche: sarebbe come spedire migliaia di volantini per lettera tramite l'ufficio postale.

    Lo scopo di un server SMTP è quello di offrire ai client di posta la possibilità di spedire messaggi per l'utente, per una ragionevole quantità di e-mail e/o un numero contenuto di destinatari: anche se potenzialmente - a livello di protocollo e come implementazione software - risulta fattibile l'invio di tante e-mail, per questo genere di necessità adotterei un sistema più affidabile.

    Userei ad esempio servizi come SendGrid e affini, che hanno una API moderna, la tracciabilità, le statistiche, un "billing" chiaro, meccanismi di retry già implementati (o realizzerei in casa qualcosa di analogo con un sistema di messaggistica e code).

  • Re: *.dll 64bit OpenSSL per Indy

    Ciao Alka,

    nel caso della mia app non si tratta di mailing massivi pubblicitari, ma del semplice routing automatico di documenti ai destinatari interessati, ad esempio dell'invio trimestrale di circa 200 bollette da parte di un amministratore di condominio ai propri clienti. Valuterò se gestire i socket error con un retry automatico oppure di integrare una soluzione come SendGrid.

    Grazie del suggerimento. : )

    Ale

  • Re: *.dll 64bit OpenSSL per Indy

    18/03/2025 - al.delphi ha scritto:

    nel caso della mia app non si tratta di mailing massivi pubblicitari, ma del semplice routing automatico di documenti ai destinatari interessati, ad esempio dell'invio trimestrale di circa 200 bollette da parte di un amministratore di condominio ai propri clienti.

    Sì, non volevo sindacare sull'utilizzo specifico: mi riferivo in particolare alla questione dei volumi, qualunque sia il contenuto delle e-mail in questione. :)

    17/03/2025 - al.delphi ha scritto:

    Sul PC di sviluppo i componenti Indy funzionano bene, a parte rari socket error quando si tenta di inviare quantità elevate di mails. : )

    A proposito di Indy, mi è venuto in mente che esiste anche questo progetto, legato al supporto OpenSSL 1.1 e 3.x per Indy: TaurusTLS.

    Dacci un'occhiata.

  • Re: *.dll 64bit OpenSSL per Indy

    Ciao a tutti, 

    per favore, scusatemi se torno sul discorso Indy per invio mail SMTP.

    Il seguente codice funziona sul mio sistema di sviluppo (Win10 64-bit, Delphi 12.3), mentre sul PC del cliente (Win10 64-bit) da errore "could not load ssl library". Entrambe le installazioni dispongono degli stessi files libcrypto.dll e libssl.dll (in versione 3.4.1 64.bit) all'interno della cartella del programma 64.bit.

    procedure TfrmMain.actSendMailExecute(Sender: TObject);
    var
    DATA: TIdMessage;
    SMTP: TIdSMTP;
    SSL: TIdSSLIOHandlerSocketOpenSSL;
    begin
    SMTP := TIdSMTP.Create(nil);
    DATA := TIdMessage.Create(nil);
    SSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    try
      SSL.SSLOptions.Method := sslvTLSv1;
      SSL.SSLOptions.Mode := sslmUnassigned;
      SSL.SSLOptions.VerifyMode := [];
      SSL.SSLOptions.VerifyDepth := 0;
      DATA.From.Address := SenderMail;
      DATA.Recipients.EMailaddresses := SendToMail;
      DATA.Subject := 'Hello world';
      DATA.Body.Text := 'Hello text';
      SMTP.IOHandler := SSL;
      SMTP.Host := SmtpHost;
      SMTP.Port := 587;
      SMTP.Username := SenderMail;
      SMTP.Password := appPassword;
      SMTP.UseTLS := utUseExplicitTLS;
      SMTP.Connect;
      SMTP.Send(DATA);
      SMTP.Disconnect;
      ShowMessage('SMTP parameter test successful.');
    finally
      SMTP.Free;
      DATA.Free;
      SSL.Free;
    end;
    end;

    Il messaggio di errore SSL appare non appena venga eseguito il codice, presumo quando cerca di eseguire TIdSSLIOHandlerSocketOpenSSL.Create.

    Per caso, qualcuno conosce il messaggio d'errore "could not load ssl library" e potrebbe indicarmi un'eventuale soluzione/workaround per correttamente distribuire le dll OpenSSL?

    Grazie, Ale

  • Re: *.dll 64bit OpenSSL per Indy

    Probabilmente ti manca una DLL.
    Quale? Ovviamente cosi' non e' dato saperlo.
    MA c'e' un modo per capirlo.
    .
    https://github.com/lucasg/Dependencies
    .
    Questo e' un tool che, dato un exe o una DLL, ti mostra TUTTE le dipendenze (altre DLL che vengono usate), in modo "ricorsivo"
    Se manca una DLL, ti mostra le dipendenze mancanti in rosso.
    .
    1) usi il tool sul TUO PC dove funziona tutto
    2) ti fai l'elenco dellle DLL usate. OVVIAMENTE SOLO quelle NON facenti parte di Windows, visto che quelle ci saranno ANCHE sull'altro PC
    3) vai sull'altro PC e usi il tool sull'applicazione che non funziona
    4) controlli QUALI DLL ci sono sul tuo PC e NON SULL'altro PC
    5) copy le DLL mancanti nella stessa directory dell'applicazione.
    .
    In generale questo funziona.
    .
    La mancanza di un DLL potrebbe anche voler dire che manca l'installazione di qualche libreria, come OpenSSL.
    Devi investigare un po'.

  • Re: *.dll 64bit OpenSSL per Indy

    Grazie del suggerimento, migliorabile! Farò anche un'altra compilazione dell'applicazione utilizzando il componente TTaurusTLSIOHandlerSocket invece di TIdSSLIOHandlerSocketOpenSSL, come consigliato dal supporto Embarcadero.

    Alla ricerca di un esempio del corretto uso di TaurusTLS mi sono imbattuto nello stesso chm help file (https://github.com/JPeterMugaas/TaurusTLS/tree/main/Help/chm) che scaricato in locale, a me visualizza correttamente tutte le voci nell'indice ma non visualizza le pagine html con il contenuto testuale. : )

    C'è ne sempre una ... comunque farò sapere se l'utilizzo di TaurusTLS risolve il problema segnalato.

    Ale

  • Re: *.dll 64bit OpenSSL per Indy

    OpenSSL dll.

    In realtà non hai le DLL corrette sul sistema del cliente.

    Originariamente usavi Indy bundle se non sbaglio (cioè quello distribuito con Delphi) e questo supporta solo le librerie OpenSSL fino alla versione 1.0.2u
    Sicuramente non poteva usare le 3.4.1, inoltre le librerie 3.4.1 si chiamano in maniera diversa (comunque non caricabili dalla versione bundle di Delphi).

    L'ipotesi è che sul tuo PC di sviluppo tu abbia le librerie 1.0.2u (o compatibili) già installate in una delle directory presenti nella path di Windows (ci sono diversi prodotti che installano quelle librerie anche nella System32).
    Caricando le dll corrette dove c'è il tuo eseguibile nel PC del cliente probabilmente avresti risolto il problema.

    Come indicato da gli altri partecipanti al topic, TaurusTLS consente di "aggiornare la funzionalità di Indy con l'uso delle OpenSSL di ultima generazione.

    Ti confermo che funzionano, non ho provato l'SMTP ma non ho motivo di dubitare del funzionamento.

    17/07/2025 - al.delphi ha scritto:

    ................

    Alla ricerca di un esempio del corretto uso di TaurusTLS mi sono imbattuto nello stesso chm help file (https://github.com/JPeterMugaas/TaurusTLS/tree/main/Help/chm) che scaricato in locale, a me visualizza correttamente tutte le voci nell'indice ma non visualizza le pagine html con il contenuto testuale. : )

    C'è ne sempre una ... comunque farò sapere se l'utilizzo di TaurusTLS risolve il problema segnalato.

    Ale

    Il chm non si apre correttamente perchè avendolo scaricato da Internet lo stesso file è bloccato.

    Premi con il tasto destro sul file e visualizza le proprietà: vedrai in fondo al pannello che ti si è aperto che c'è una voce che dice che Windows ha bloccato le funzionalità del file. Seleziona la CHECKBOX li a fianco e conferma per sbloccare il file.
    Vedrai che il CHM poi si comporterà correttamente.

    Ciao

Devi accedere o registrarti per scrivere nel forum
9 risposte