Aspose.Email  pentru C++

Trimite e-mail C++

Cum se utilizează C ++ și SMTP pentru a trimite e-mail cu atașament sau iCalendar

  Descarcă Proba Gratuită

De regulă, protocolul SMTP este utilizat pentru a trimite mesaje de e-mail. Aveți nevoie de acces la un server SMTP pentru a trimite un mesaj. Trebuie să găsiți adresa serverului SMTP din rețea, să determinați portul și tipul de criptare, autentificare și metoda de autorizare. Unii furnizori de e-mail vă solicită, de asemenea, să activați accesul la serverul SMTP în setările contului. De asemenea, dacă nu vă simțiți confortabil să implementați autorizarea OAuth în software-ul dvs., puteți încerca să creați o parolă separată pentru aplicație în setările contului.

Deci, dacă ați făcut toate lucrările pregătitoare, este timpul să începeți să trimiteți mesaje. Puteți utiliza biblioteca Aspose.Email pentru C++ pentru acest lucru. Luați în considerare cel mai simplu exemplu:

auto smtpClient = MakeObject<SmtpClient>(u"smtp.gmail.com", u"login", u"password", SecurityOptions::SSLAuto);
smtpClient->Send(u"login@gmail.com", u"to@gmail.com", u"subject", u"body");

Utilizați această opțiune dacă doriți să trimiteți un e-mail text simplu.

Trimiteți e-mailuri cu atașamente utilizând C ++

Dacă trebuie să trimiteți un mesaj de e-mail complex folosind C ++, clasa MailMessage va fi cu siguranță utilă. De exemplu, pentru a trimite un mesaj similar cu cel precedent:

auto message = MakeObject<MailMessage>(u"login@gmail.com", u"to@aspose.com", u"subject", u"body");
smtpClient->Send(message);

Clasa MailMessage este un instrument excelent. Vă permite să trimiteți mesaje stocate în formate de fișiere EML și MSG (Outlook Message Format). De asemenea, puteți utiliza acest format pentru a trimite atașamente sau chiar obiecte iCalendar pentru a configura sau confirma prezența. MailMessage vă permite să reglați fin lista destinatarilor, destinatarii Cc și Bcc. Puteți trimite un e-mail cu marcaj HTML. De asemenea, puteți marca mesajul cu diferite steaguri înainte de a-l trimite, adăugați metadate, criptați-l etc.

De ce oamenii aleg Aspose.Email pentru C ++ pentru trimiterea de e-mailuri?

Da, Aspose.Email pentru C++ nu este doar un utilitar pentru trimiterea mesajelor de e-mail. Aceasta este o soluție cuprinzătoare care oferă suport cuprinzător pentru o varietate de sarcini legate de trimiterea, primirea, stocarea și procesarea e-mailurilor. Și puteți fi sigur că atunci când efectuați aceste sarcini, nu veți intra în limitările bibliotecii. Studiem acest subiect de mulți ani și îi extindem constant funcționalitatea.

Probabil ați întâlnit biblioteci mici care au apărut relativ recent. Ele rezolvă ușor și natural o problemă simplă cu care se confruntă mulți utilizatori. Dar de îndată ce te lași puțin deoparte, îți dai seama că, continuând să folosești această nepretențioasă, ești obligat să închizi constant cârje, câteva module pentru a ocoli restricțiile bibliotecii, adaptoare concepute pentru a face prieteni cu biblioteca ta mică cu o altă bibliotecă mică etc. Și acum, soluția ta mică nu mai este atât de inteligentă. Mai mult, îl trimiteți la server, unde se trage în mod regulat și constant în picior, pentru că nimeni nu a testat o astfel de grădină zoologică de cârje și integrări înaintea voastră. Și oricât de greu încercați, mai devreme sau mai târziu veți mai întâmpina limitările acestei biblioteci. Și trebuie să cauți ceva nou. Deci, atunci când vine vorba de lucrul cu e-mailul, poate doriți să luați în considerare Aspose.Email pentru C++!

Vă oferim nu doar un client pentru lucrul cu SMTP. În primul rând, este departe de singurul protocol pentru trimiterea de e-mailuri cu C ++. Cu produsul nostru, puteți trimite e-mailuri folosind Exchange EWS și Microsoft Graph!

V-am spus deja despre posibilitățile MailMessage în acest articol. Dar acest lucru este departe de singurul instrument pentru pregătirea scrisorilor pentru trimitere. Poți:

  • generați litere dintr-un șablon folosind TemplateEngine;
  • despachetați containerele cu litere, datorită suportului formatelor OST, PST și MBOX;
  • descărcați scrisori din cutia poștală utilizând suportul protocoalelor IMAP, POP3, Exchange EWS și WebDAV, precum și Microsoft Graph;
  • convertiți e-mailurile dintr-un format în altul.

Puteți primi cu ușurință o scrisoare utilizând protocolul Exchange Ews. Acesta va fi în format MAPI. Dar îl puteți converti cu ușurință în format EML, ceea ce vă va permite să îl trimiteți mai târziu prin protocolul SMTP. În același timp, puteți modifica oricând lista destinatarilor sau expeditorul scrisorii.

Cum funcționează trimiterea unui e-mail folosind C ++ și SMTP?

Configurare SMTP

În momentul în care creați o instanță a clasei SmtpClient, nu se întâmplă nimic special. Pur și simplu specificați numărul de setări care vă vor permite să vă conectați la un server SMTP în viitor pentru a trimite mesaje. Toată magia se întâmplă la primul apel la send metoda. Ce se întâmplă în acest moment?

De fapt, totul depinde de setările pe care le-ați specificat. Să luăm în considerare mai multe opțiuni. Să presupunem că ați specificat gazda serverului, dar nu ați specificat portul și tipul de criptare. În acest caz, va începe mecanismul de selecție automată a setărilor. Acest mecanism constă în încercări succesive de conectare la serverul SMTP folosind porturi standard și algoritmii de criptare corespunzători. În primul rând, se încearcă conectarea la server printr-un canal criptat. Dar dacă nu reușește, mecanismul va încerca să stabilească o conexiune necriptată. Dacă nu doriți să utilizați versiunea necriptată a protocolului, specificați SecurityOptions.SSL_AUTO setare. Această setare vă permite, de asemenea, să selectați setările serverului, dar verifică numai canalele criptate.

Dacă a fost posibilă stabilirea unei conexiuni cu serverul, atunci se face o încercare de autorizare. Dacă autorizarea eșuează, codul de eroare este salvat pentru viitor. Matcherul va încerca să se conecteze în alte moduri. Mesajul va fi trimis dacă vă puteți conecta și conecta. Dacă conexiunea eșuează, utilizatorul va primi un cod de eroare de autorizare (dacă unul a fost salvat în timpul selecției). Astfel, utilizatorul va putea înțelege că a introdus parola greșită sau a făcut o altă greșeală. Dacă niciuna dintre opțiunile pentru porturi și tipuri de criptare nu se potrivește și nici măcar nu am ajuns la încercarea de autorizare, utilizatorul va primi o eroare notificând despre setările incorecte ale serverului.

Apropo, trebuie remarcat faptul că SMTPClientul nostru (ca toți ceilalți clienți ai bibliotecii noastre) se poate conecta la serverul SMTP printr-un proxy. De asemenea, puteți specifica setările serverului proxy în timpul inițializării.

Autorizare client SMTP

SmtpClient acceptă mai mult decât metode de conectare diferite. De asemenea, acceptă diferite metode de autorizare. De exemplu, puteți utiliza mecanismul OAuth. Pentru a face acest lucru, oferim mai multe instrumente simultan.

În primul rând, este TokenProvider. Aceasta este clasa care conține toate datele necesare pentru stocarea și reîmprospătarea jetonului OAuth. În acest caz, trebuie să efectuați singur autorizația OAuth și să salvați toate informațiile necesare primite de la serverul OAuth. RefreshToken joacă un rol cheie aici. Acesta este un token suplimentar emis de serverul de autorizare, împreună cu AccessToken. Diferența lor este că AccessToken, de regulă, este valabil numai pentru o anumită perioadă de timp. În timp ce RefreshToken este valabil mult mai mult sau chiar pe termen nelimitat (până când utilizatorul îl revocă). Datorită RefreshToken, clasa TokenProvider poate reîmprospăta întotdeauna un AccessToken dacă acesta din urmă nu mai este valabil.

O altă opțiune este interfața ITokenProvider. În acest caz, nu numai că puteți implementa singur mecanismul OAuth, ci îl puteți transmite și către SmtpClient, astfel încât să îl folosească singur după cum este necesar.

Trebuie remarcat faptul că mecanismul OAuth nu este întotdeauna necesar. Uneori este mult mai ușor să vă conectați cu un nume de utilizator și o parolă. Și pentru aceasta, nu este nevoie să vă reconfigurați deloc contul de e-mail, să refuzați autorizarea cu doi factori etc. Există o soluție mai sigură - aceasta este o parolă separată pentru aplicație. Pentru a profita de această caracteristică, ar trebui să vă uitați la setările contului dvs. de e-mail. Cel mai probabil, parola pentru aplicație va fi generată automat atunci când o configurați în contul dvs. Nu uitați să o salvați undeva. De asemenea, vă recomandăm să limitați permisiunile aplicației pe cât posibil în timpul configurării. Desigur, dacă un atacator obține acces la această parolă, el nu va putea să vă potrivească contul, dar poate face în continuare multe lucruri neplăcute. Și aici nu puteți face nimic, deoarece parola este singurul lucru care vă protejează datele de intruși. În general, instrumentul este foarte convenabil, dar scade securitatea contului dvs., utilizați-l pe propriul risc.

Trimiterea de e-mail prin SMTP cu C ++

Deci, conexiunea la server este stabilită, iar autorizarea a avut succes. E timpul să trimiți scrisori. Pentru trimitere, se utilizează un obiect al clasei MailMessage. Din punct de vedere tehnic, puteți transmite toate datele necesare metodei de trimitere. Dar, de fapt, ele vor fi în continuare colectate în obiectul MailMessage. Mai mult, datorită capacității clasei MailMessage de a serializa în formatul EML, obținem fluxul de date necesar care poate fi transmis serverului nostru SMTP. Astfel, dăm serverului o comandă pentru a trimite o scrisoare și de a transfera tot conținutul scrisorii sub formă de date text. Dacă datele binare sunt transmise în scrisoare, de exemplu, sub formă de fișiere atașate, aceste date sunt codificate în format Base64, iar metadatele literei indică faptul că destinatarul va trebui să o decodeze înapoi. Serverul SMTP poate verifica corectitudinea mesajului primit (de exemplu, verificați câmpul FROM cu contul expeditorului de pe server), precum și să completeze metadatele mesajului la discreția sa. Apoi, serverul va trimite e-mailul destinatarilor, o listă pe care o va primi și din metadatele e-mailului.