Aspose.Email  per a C++

Envia correu C++

Com utilitzar C++ i SMTP per enviar correu amb adjunció o iCalendar

  Descarrega la prova gratuïta

En regla, el protocol SMTP s’utilitza per enviar missatges de correu electrònic. Necessiteu accés a un servidor SMTP per enviar un missatge. Heu de 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ó. Algunes plataformes de correu electrònic també demanen que activeu l’accés al servidor SMTP a la configuració del vostre compte. A més, si no us sentiu còmode 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 realitzat tot el treball preparatori, és hora d’iniciar l’enviament de missatges. Podeu utilitzar la biblioteca Aspose.Email per a C++ per a això. Considereu 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 de text simple.

Enviament de correu amb adjuncions utilitzant C++

Si necessiteu enviar un missatge de correu electrònic complex utilitzant C++, la classe MailMessage us serà definitivament útil. Per exemple, per enviar un missatge similar al 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 de fitxer EML i MSG (Format de Missatge Outlook). També podeu utilitzar aquest format per enviar adjuncions o fins i tot objectes iCalendar per organitzar o confirmar l’assistència. MailMessage us permet ajustar finament la llista de destinataris, còpies (Cc) i còpies ocultes (Bcc). Podeu enviar un correu electrònic amb marcatge HTML. També podeu 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 enviar correu electrònic?

Sí, Aspose.Email per a C++ no és només una utilitat per enviar missatges de correu electrònic. És una solució integral que ofereix suport complet per a una varietat de tasques relacionades amb l’enviament, recepció, emmagatzematge i processament de correu. I podeu estar segurs que, en realitzar aquestes tasques, no us trobareu amb les limitacions de la biblioteca. Estudiem aquest tema des de fa molts anys i estem ampliant constantment la seva funcionalitat.

Probablement us heu trobat amb petites biblioteques que han aparegut relativament recentment. Són capaces de resoldre fàcilment i de forma natural un problema senzill que molts usuaris enfronten. Però tan bon punt feu un pas enrere, us adoneu que, en continuar utilitzant aquesta biblioteca modesta, sou forçats a envolver constantment alternatives, alguns mòduls per esquivar les limitacions de la biblioteca, adaptadors dissenyats per fer amic amb la vostra petita biblioteca amb una altra, etc. I ara, la vostra petita solució enginyosa ja no és tan enginyosa. A més, l’envieu al servidor, on sovint i constantment es colpeja a si mateixa, perquè ningú havia provat un zoo d’enganys i integracions com aquest abans. I per molt que ho intenteu, més aviat que tard us trobareu amb les limitacions d’aquesta biblioteca. I haureu de buscar alguna cosa nova. Per tant, quan es tracta de treballar amb correu electrònic, potser voldreu considerar Aspose.Email per a C++!

Us oferim més que un client per treballar amb SMTP. En primer lloc, està lluny de ser l’únic protocol per enviar correus electrònics amb C++. Amb el nostre producte, podeu enviar correus utilitzant Exchange EWS i Microsoft Graph!

Ja us hem explicat les possibilitats de MailMessage en aquest article. Però això és lluny d’ésser l’única eina per preparar cartes per enviar. Podeu:

  • generar cartes a partir d’una plantilla mitjançant TemplateEngine;
  • desempaquetar contenidors amb cartes, gràcies al suport dels formats OST, PST i MBOX;
  • descarregar cartes de la bústia utilitzant la compatibilitat amb els 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-la fàcilment a format EML, el que us permetrà enviar-la posteriorment via protocol SMTP. Al mateix temps, podeu modificar la llista de destinataris o l’emissor de la carta en qualsevol moment.

Com funciona l'enviament d'un correu electrònic amb C++ i SMTP?

Configuració SMTP

En el moment que creeu una instància de la classe SmtpClient, no passa res especial. Simplement especifiqueu una sèrie de configuracions que us permetran connectar a un servidor SMTP en el futur per enviar missatges. Tota la màgia ocorre a la primera crida al send mètode. Què està passant en aquest moment?

En realitat, tot depèn de quines configuracions heu especificat. Considerem diverses opcions. Suposem 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 configuracions. Aquest mecanisme consisteix en intents successius de connectar al servidor SMTP utilitzant ports estàndard i els algoritmes de xifrat corresponents. Primer, s’intenta connectar al servidor per un canal xifrat. Si falla, el mecanisme intentarà establir una connexió sense xifrar. Si no voleu utilitzar la versió no xifrada del protocol, indiqueu el SecurityOptions.SSL_AUTO configuració. Aquesta configuració també us permet seleccionar opcions del servidor, però només comprova canals xifrats.

Si s’ha pogut establir una connexió amb el servidor, es fa un intent d’autorització. Si l’autorització falla, s’enregistra el codi d’error per al futur. El matcher intentarà connectar d’altres maneres. El missatge s’enviarà si podeu connectar i iniciar sessió. Si la connexió falla, l’usuari rebrà un codi d’error d’autorització (si n’hi havia d’un guardat durant la selecció). Així l’usuari podrà entendre que ha introduït la contrasenya incorrecta o ha comès algun altre error. Si cap de les opcions de ports i tipus de xifrat coincideix i ni tan sols arribe a l’intent d’autorització, l’usuari rebrà un error que notifica la configuració incorrecta del servidor.

Per cert, cal assenyalar 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 proxy durant la inicialització.

Autorització del client SMTP

SmtpClient admet més que diferents mètodes de connexió. També admet diferents mètodes d’autorització. Per exemple, podeu utilitzar el mecanisme OAuth. Per a això, proporcionem diverses eines alhora.

Primer de tot, és TokenProvider. Aquesta és la classe que conté totes les dades necessàries per emmagatzemar i actualitzar el token OAuth. En aquest cas, heu d’executar l’autorització OAuth vosaltres mateixos i desar tota la informació necessària rebuda del servidor OAuth. RefreshToken juga un paper clau aquí. Aquest és un token addicional emès per l’autoritzador, juntament amb AccessToken. La seva diferència és que l’AccessToken, per regla, és vàlid només per un període determinat de temps. Mentre que el RefreshToken és vàlid durant molt més temps, o fins i tot indefinidament (fins que l’usuari el revoca). Gràcies al RefreshToken, la classe TokenProvider pot actualitzar sempre un AccessToken si aquest ja no és vàlid.

Una altra opció és la interfície ITokenProvider. En aquest cas, no només podeu implementar el mecanisme OAuth vosaltres mateixos, sinó també passar-lo al SmtpClient perquè l’utilitzi segons sigui necessari.

Cal destacar que el mecanisme OAuth no sempre és necessari. De vegades és molt més senzill entrar amb un nom d’usuari i contrasenya. I per això, no cal reconfigurar el vostre compte de correu, renunciar a l’autenticació de doble factor, etc. Hi ha una solució més segura: una contrasenya separada per a l’aplicació. Per aprofitar aquesta funció, hauríeu de consultar la configuració del vostre compte de correu. Molt probablement, la contrasenya per a l’aplicació es generarà automàticament quan la creeu al vostre compte. No oblideu desar-la en algun lloc. També recomanem limitar tant com sigui possible els permisos de l’aplicació durant la configuració. És cert que, si un atacant accedeix 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’únic element que protegeix les vostres dades dels intrusos. En general, l’eina és molt convenient, però disminueix la seguretat del vostre compte; utilitzeu-la sota la vostra responsabilitat.

Enviament de correu via SMTP amb C++

Cara, la connexió amb el servidor s’ha establert i l’autorització ha estat satisfactòria. És el moment d’enviar les cartes. Per a l’enviament s’utilitza un objecte de la classe MailMessage. Tècnicament, podeu simplement passar totes les dades necessàries al mètode d’enviament. Però, de fet, aquestes dades continuaran recollides dins l’objecte MailMessage. A més, gràcies a la capacitat de la classe MailMessage per serialitzar al format EML, obtenim el flux de dades necessari que es pot passar al nostre servidor SMTP. Així doncs, donem al servidor una ordre d’enviar la carta i transferim tot el contingut de la carta com a dades de text. Si es transmeten dades binàries en la carta, 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 desxifrar-les. El servidor SMTP pot comprovar la correcció del missatge rebut (per exemple, verificar el camp FROM amb el compte de l’emissor al servidor), així com afegir metadades del missatge a discreció seva. Després, el servidor enviarà el correu als destinataris, la llista dels quals també obtindrà de les metadades del correu.