Dipende da cosa devi inviare e come...
Se vuoi inviare attach oppure non vuoi usare il gestore email istallato sul pc devi usare componenti di terze parti (per esempio Indy).
Se vuoi inviare messaggi senza attach ed utilizzare il gestore del pc basta chiamare la funzione OpenURL(messaggio : string) in questo modo:
// invio a indirizzo@pippo.it un messaggio che ha come oggetto Questo è l'oggetto
// e come testo del messaggio questo è il testo del messaggio
Var
Messaggio : String;
Begin
Messaggio := 'mailto:indirizzo@pippo.it?subject=Questo è l''oggetto&body=questo è il testo del messaggio';
OpenUrl(Messaggio);
End;
tieni presente che se vuoi andare a capo (più linee) devi inserire la sequenza %0D%0A. Esempio:
Messaggio := 'Linea numero 1'+'%0D%0A'+'Linea numero 2';
facile no?
Ok, alla fine ho trovato la DLL. Adesso ho un altro problema da risolvere .... la situazione è questa:
- Ubuntu 64 bit funziona
- PC di casa con Win7 pro 64 bit funziona
- PC del lavoro con Win XP, non funziona
Credo che il problema sia dovuto al fatto che al lavoro siamo sotto proxy.
Ho provato nel tuo codice, subito sotto a
if (MySicurezza = 2) then begin
//SSL/TLS
smtp.FullSSL := True;
end;
ad aggiungere questo:
smtp.Sock.HTTPTunnelIP:='NomeDelProxyAziendale';
smtp.Sock.HTTPTunnelPort:='8080';
Ma non funziona ugualmente, mi esce il messaggio che utente e password sono errati.
Non so se è uno standard, ma il mio proxy aziendale funziona così:
- l'accesso avviene in automatico all'avvio del PC
- nei posti in cui serve, basta indicare il nome del proxy e la porta, non vanno indicati utente e password
Con la stessa tecnica, cioè indicando nome del proxy e porta, sempre da Lazarus e sempre con Synapse, riesco a fare il download di files dal web.
Qualche idea?
Grazie in anticipo, Mario
Ciao,
ho un problemino ....
Allora, in un programma, sto usando la tua unit per inviare un'email, prendendo il testo da quello che l'utente digita in un TMemo.
Questo è quello che c'è nel TMemo:
per cui non è stata fatta
Questo invece è quello che c'è scritto nella mail:
per cui non Ã̈ stata fatta
Credo che il problema derivi dal fatto che i testi del programma sono UTF8 e l'email no.
Qualche consiglio?
Grazie in anticipo, Mario
L'esempio che hai postato sul mio pc funziona, ma con outlook.com, con Gmail non c'e verso.
Se ho capito bene da maggio 2022 Google ha cambiato i criteri di accesso, non basta più nome utente e password
https://support.google.com/accounts/answer/6010255?hl=it (https://support.google.com/accounts/answer/6010255?hl=it)
Inoltre bisogna settare su False SSLTLS
app.SetMyUser('utente@outlook.com');
app.SetMyPassword('password');
app.SetMyNome('nomeutente');
app.SetMyFrom('utente@outlook.com');
app.SetMyPorta('587');
app.SetMySMTPHost('smtp.office365.com');
app.SetSSLTLS(False);
Ho usato le librerie 1.0.2u che trovi qui
https://indy.fulgan.com/SSL/ (https://indy.fulgan.com/SSL/)
ci si arriva dalla pagina
https://docwiki.embarcadero.com/RADStudio/Sydney/en/OpenSSL#32-bit_and_64-bit_Windows (https://docwiki.embarcadero.com/RADStudio/Sydney/en/OpenSSL#32-bit_and_64-bit_Windows)
Spulciano il codice del pacchetto laz_synapse ho trovato questa sezione
DLLSSLName: string = 'ssleay32.dll';
DLLSSLName2: string = 'libssl32.dll';
DLLUtilName: string = 'libeay32.dll';
quindi ne ho concluso che synapse funziona solo con le librerie openssl 1.0.2, visto che con il cambio di versione (1.0, 1.1, 3.0) hanno cambiano anche i nomi delle DLL.
Aggiornamento:
Anche con Gmail è possibile inviare mail con app di terze parti senza la necessita dell'autentificazione OAuth2.
Per far ciò però bisogna abilitare sul proprio account la verifica in due passaggi, dopodiché è possibile generare una password dedicata all'app che si vuole abilitare.
app.SetMyUser('utente@gmail.com');
app.SetMyPassword('password per app');
app.SetMyNome('nome utente');
app.SetMyFrom('utente@gmail.com');
app.SetMyPorta('587');
app.SetMySMTPHost('smtp.gmail.com');
app.SetSSLTLS(False);
Potrebbe essere una soluzione di compromesso.
https://support.google.com/accounts/answer/185833
Provato e funziona.
Saluti