Enviar correu electrònic C++
Com utilitzar C++ i SMTP per enviar correu electrònic amb fitxer adjunt o iCalendar
Descarrega la prova gratuïtaCom a regla general, el protocol SMTP s’utilitza per enviar missatges de correu electrònic. Necessiteu accés a un servidor SMTP per poder enviar un missatge. Cal trobar l’adreça del servidor SMTP a la xarxa, determinar el port i el tipus de xifrat, inici de sessió i mètode d’autorització. Alguns proveïdors de correu electrònic també requereixen que activeu l’accés al servidor SMTP a la configuració del vostre compte. A més, si no esteu còmodes implementant l’autorització OAuth al vostre programari, podeu provar de crear una contrasenya separada per a l’aplicació a la configuració del vostre compte.
Així que, si heu fet tot el treball preparatori, és hora de començar a enviar missatges. Podeu utilitzar la biblioteca Aspose.Email for C ++ per a això. Considerem l’exemple més senzill:
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");
Utilitzeu aquesta opció si voleu enviar un correu electrònic senzill de text.
Enviar correu electrònic amb fitxers adjunts utilitzant C ++
Si necessiteu enviar un missatge de correu electrònic complex utilitzant C ++, la classe MailMessage sens dubte us vindrà útil. Per exemple, per enviar un missatge similar a l’anterior:
auto message = MakeObject<MailMessage>(u"login@gmail.com", u"to@aspose.com", u"subject", u"body");
smtpClient->Send(message);
La classe MailMessage és una gran eina. Permet enviar missatges emmagatzemats en formats d’arxiu EML i MSG (Format de missatge d’Outlook). També podeu utilitzar aquest format per enviar fitxers adjunts o fins i tot objectes d’iCalendar per configurar o confirmar assistència. MailMessage us permet afinar la vostra llista de destinataris, destinataris de Cc i Bcc. Podeu enviar un correu electrònic amb marcatge HTML. També es pot marcar el missatge amb diverses banderes abans d’enviar-lo, afegir metadades, xifrar-lo, etc.
Per què la gent tria Aspose.Email per a C++ per a l'enviament de correu electrònic?
Sí, Aspose.Email per a C++ no és només una utilitat per enviar missatges de correu electrònic. Aquesta és una solució integral que proporciona suport integral per a una varietat de tasques relacionades amb l’enviament, recepció, emmagatzematge i processament de correu electrònic. I podeu estar segurs que a l’hora de realitzar aquestes tasques, no us topareu amb les limitacions de la biblioteca. Portem molts anys estudiant aquest tema i estem ampliant constantment la seva funcionalitat.
Probablement us heu trobat amb petites biblioteques que han aparegut fa relativament poc temps. Solucionen de forma fàcil i natural un problema senzill al qual s’enfronten molts usuaris. Però tan aviat com et deixis de banda una mica, t’adones que en continuar utilitzant aquest sense pretensions, et veus obligat a tancar constantment muletes, alguns mòduls per obviar les restriccions de biblioteques, adaptadors dissenyats per fer amistat amb la teva petita biblioteca amb una altra petita biblioteca, etc. I ara, la teva petita solució genial ja no és tan genial. És més, l’envieu al servidor, on regularment i consistentment es dispara al peu, perquè ningú ha provat un zoo d’aquest tipus de muletes i integracions abans que vosaltres. I per molt que ho esforcis, tard o d’hora encara toparàs amb les limitacions d’aquesta biblioteca. I cal buscar alguna cosa nova. Així doncs, quan es tracta de treballar amb el correu electrònic, potser voldreu considerar Aspose.Email per a C ++!
T’oferim no només un client per treballar amb SMTP. En primer lloc, és lluny de ser l’únic protocol per enviar correus electrònics amb C++. Amb el nostre producte, podeu enviar correus electrònics mitjançant Exchange EWS i Microsoft Graph!
Ja us hem parlat de les possibilitats de MailMessage en aquest article. Però aquesta és lluny de l’única eina per preparar cartes per a l’enviament. Vostè pot:
- generar lletres a partir d’una plantilla utilitzant TemplateEngine;
- desempaquetar contenidors amb lletres, gràcies al suport dels formats OST, PST i MBOX;
- descarregar cartes de la bústia mitjançant el suport de protocols IMAP, POP3, Exchange EWS i WebDAV, així com Microsoft Graph;
- convertir correus electrònics d’un format a un altre.
Podeu rebre fàcilment una carta mitjançant el protocol Exchange Ews. Serà en format MAPI. Però podeu convertir-lo fàcilment a format EML, que us permetrà enviar-lo posteriorment mitjançant protocol SMTP. Al mateix temps, podeu canviar la llista de destinataris o el remitent de la carta en qualsevol moment.
Com funciona l'enviament d'un correu electrònic mitjançant C++ i SMTP?
Configuració SMTP
En el moment en què creeu una instància de la classe SMTPClient, no passa res especial. Simplement especifiqueu el nombre de configuracions que us permetran connectar-vos a un servidor SMTP en el futur per enviar missatges. Tota la màgia succeeix en la primera trucada al send
mètode. Què està passant en aquest moment?
De fet, tot depèn de la configuració que hàgiu especificat. Considerem diverses opcions. Diguem que heu especificat l’amfitrió del servidor però no heu especificat el port i el tipus de xifrat. En aquest cas, s’iniciarà el mecanisme de selecció automàtica de la configuració. Aquest mecanisme consisteix en successius intents de connexió al servidor SMTP utilitzant ports estàndard i els corresponents algoritmes de xifrat. En primer lloc, s’intenta connectar-se al servidor a través d’un canal xifrat. Però si falla, el mecanisme intentarà establir una connexió sense xifrar. Si no voleu utilitzar la versió no xifrada del protocol, especifiqueu el SecurityOptions.SSL_AUTO
configuració. Aquesta configuració també permet seleccionar la configuració del servidor, però només comprova els canals xifrats.
Si fos possible establir una connexió amb el servidor, llavors es fa un intent d’autorització. Si l’autorització falla, el codi d’error es guarda per al futur. El matcher intentarà connectar-se d’altres maneres. S’enviarà el missatge si podeu connectar-vos i iniciar sessió. Si falla la connexió, l’usuari rebrà un codi d’error d’autorització (si un es va guardar durant la selecció). Així l’usuari podrà entendre que va introduir la contrasenya equivocada o va cometre algun altre error. Si cap de les opcions de ports i tipus d’encriptació encaixa i ni tan sols vam arribar a l’intent d’autorització, l’usuari rebrà un error notificant sobre la configuració incorrecta del servidor.
Per cert, cal destacar que el nostre SMTPClient (com tots els altres clients de la nostra biblioteca) pot connectar-se al servidor SMTP a través d’un proxy. També podeu especificar la configuració del servidor intermediari durant la inicialització.
Autorització del client SMTP
SMTPClient admet més que mètodes de connexió diferents. També admet diferents mètodes d’autorització. Per exemple, podeu utilitzar el mecanisme OAuth. Per fer-ho, proporcionem diverses eines alhora.
En primer lloc, és TokenProvider. Aquesta és la classe que conté totes les dades necessàries per emmagatzemar i refrescar el token OAuth. En aquest cas, hauràs de realitzar tu mateix l’autorització OAuth i guardar tota la informació necessària rebuda del servidor OAuth. RefreshToken juga un paper clau aquí. Aquest és un token addicional emès pel servidor d’autorització, juntament amb AccessToken. La seva diferència és que AccessToken, per regla general, només és vàlid durant un període de temps determinat. Mentre que RefreshToken és vàlid durant molt més temps, o fins i tot indefinidament (fins que l’usuari el revoqui). Gràcies a RefreshToken, la classe TokenProvider sempre pot refrescar un AccessToken si aquest últim ja no és vàlid.
Una altra opció és la interfície ITokenProvider. En aquest cas, no només pots implementar tu mateix el mecanisme OAuth sinó també passar-lo a l’SMTPClient perquè l’utilitzi ell mateix segons sigui necessari.
Cal assenyalar que el mecanisme OAuth no sempre és necessari. De vegades és molt més fàcil iniciar sessió amb un nom d’usuari i contrasenya. I per això, no cal reconfigurar el vostre compte de correu electrònic en absolut, rebutjar l’autorització de dos factors, etc Hi ha una solució més segura: aquesta és una contrasenya separada per a l’aplicació. Per aprofitar aquesta funció, heu d’examinar la configuració del vostre compte de correu electrònic. El més probable és que la contrasenya de l’aplicació es generi automàticament quan la configureu al vostre compte. No t’oblidis de guardar-lo en algun lloc. També recomanem limitar el màxim possible els permisos de la vostra aplicació durant la configuració. Per descomptat, si un atacant guanya accés a aquesta contrasenya, no podrà apropiar-se del vostre compte, però encara pot fer moltes coses desagradables. I aquí no podeu fer res, perquè la contrasenya és l’única cosa que protegeix les vostres dades d’intrusos. En general, l’eina és molt convenient, però redueix la seguretat del vostre compte, utilitzeu-la al vostre propi risc.
Enviament de correu electrònic a través de SMTP amb C ++
Així doncs, s’estableix la connexió amb el servidor i l’autorització va tenir èxit. És hora d’enviar cartes. Per a l’enviament s’utilitza un objecte de la classe MailMessage. Tècnicament, només podeu passar totes les dades necessàries al mètode d’enviament. Però, de fet, encara es recolliran en l’objecte MailMessage. A més, gràcies a la capacitat de la classe MailMessage de serialitzar al format EML, obtenim el flux de dades necessari que es pot passar al nostre servidor SMTP. Així, donem al servidor una ordre per enviar una carta i transferir-li tot el contingut de la carta en forma de dades de text. Si en la carta es transmeten dades binàries, per exemple, en forma d’arxius adjunts, aquestes dades es codifiquen en format Base64, i les metadades de la carta indiquen que el destinatari haurà de descodificar-la de nou. El servidor SMTP pot comprovar la correcció del missatge rebut (per exemple, comprovar el camp FROM amb el compte de l’emissor al servidor), així com complementar les metadades del missatge a la seva discreció. Després, el servidor enviarà el correu electrònic als destinataris, una llista dels quals obtindrà també de les metadades del correu electrònic.