Trimiteți mesaje prin e-mail (și atașamente) folosind Delphi & Indy

Mai jos sunt instrucțiuni pentru crearea unui „expeditor de e-mail” care include o opțiune pentru trimiterea de mesaje de e-mail și atașamente direct dintr-o aplicație Delphi. Înainte de a începe, luați în considerare alternativa ...

Să presupunem că aveți o aplicație care operează pe unele date ale bazei de date, printre alte sarcini. Utilizatorii trebuie să exporte date din aplicația dvs. și trimiteți datele printr-un e-mail (precum un raport de eroare). Fără abordarea prezentată mai jos, trebuie să exportați datele într-un fișier extern și apoi să utilizați un client de e-mail pentru a le trimite.

Trimiterea de e-mail de la Delphi

Există multe modalități prin care poți trimite un e-mail direct de la Delphi, dar cel mai simplu este să folosești API-ul ShellExecute. Aceasta va trimite e-mailul utilizând clientul de e-mail implicit instalat pe computer. Deși această abordare este acceptabilă, nu puteți trimite atașamente în acest fel. 

O altă tehnică folosește Microsoft Outlook și OLE pentru a trimite emailul, de data aceasta cu suport de atașare, dar este necesar ca MS Outlook să fie utilizat.

O altă opțiune este să folosiți suportul încorporat al Delphi pentru API-ul Windows Simple Mail. Aceasta funcționează numai dacă utilizatorul are instalat un program de e-mail compatibil MAPI.

Tehnica despre care discutăm aici folosește componente Indy (Internet Direct) - o suită excelentă de componente de internet care cuprinde protocoale de internet populare scrise în Delphi și bazate pe blocarea prizelor..

Metoda TIdSMTP (Indy)

Trimiterea (sau regăsirea) mesajelor de e-mail cu componente Indy (care se livrează cu Delphi 6+) este la fel de ușoară precum aruncarea unei componente sau a două pe un formular, setarea unor proprietăți și „apăsarea unui buton”.

Pentru a trimite un e-mail cu atașamente de la Delphi folosind Indy, vom avea nevoie de două componente. În primul rând, TIdSMTOP este utilizat pentru a conecta și comunica (trimite poștă) cu un server SMTP. În al doilea rând, TIdMessage gestionează stocarea și codificarea mesajelor.

Când mesajul este construit (când TIdMessage este "umplut" cu date), e-mailul este livrat către un server SMTP folosind TIdSMTP.

E-mail Cod Sursa expeditorului

Am creat un proiect simplu de expediere de mail pe care îl explic mai jos. Puteți descărca codul sursă complet aici.

Notă: Acest link este o descărcare directă în fișierul ZIP pentru proiect. Ar trebui să poți să-l deschizi fără probleme, dar dacă nu poți, folosește 7-Zip pentru a deschide arhiva, astfel încât să poți extrage fișierele de proiect (care sunt stocate într-un folder numit Sendmail).

După cum puteți vedea din ecranul de proiectare-timp, pentru a trimite un e-mail folosind funcția TIdSMTP componentă, cel puțin trebuie să specificați serverul de poștă SMTP (gazdă). Mesajul are nevoie de părțile de e-mail obișnuite completate, cum ar fi Din, La, Subiect, etc.

Iată codul care gestionează trimiterea unui e-mail cu un atașament:

 procedură TMailerForm.btnSendMailClick (Expeditor: TObject); începe   StatusMemo.Clear;   // configurarea SMTP   SMTP.Host: = ledHost.Text; SMTP.Port: = 25;   // mesaj de configurare prin e-mail   MailMessage.From.Address: = ledFrom.Text; MailMessage.Recipients.EMailAddresses: = ledTo.Text + ',' + ledCC.Text; MailMessage.Subject: = ledSubject.Text; MailMessage.Body.Text: = Body.Text;   dacă FileExists (ledAttachment.Text) apoi TIdAttachment.Create (MailMessage.MessageParts, ledAttachment.Text);   // trimite mail   încerca     încerca       SMTP.Connect (1000); SMTP.Send (MailMessage);     cu exceptia pe E: Excepție face StatusMemo.Lines.Insert (0, 'ERROR:' + E.Message);     Sfârșit;   in cele din urma     dacă SMTP.Connected apoi SMTP.Disconnect;   Sfârșit; Sfârșit; (* btnSendMail Click *) 

Notă: În codul sursă, veți găsi două proceduri suplimentare care sunt utilizate pentru a face valorile Gazdă, Din, și La editați casetele persistente, folosind un fișier INI pentru stocare.