Aspose.Email  per C++

Invio email C++

Come usare C++ e SMTP per inviare email con allegato o iCalendar

  Scarica la prova gratuita

In genere, il protocollo SMTP è usato per inviare messaggi email. Hai bisogno di accesso a un server SMTP per inviare un messaggio. Devi trovare l’indirizzo del server SMTP sulla rete, determinare la porta e il tipo di crittografia, il metodo di login e di autorizzazione. Alcuni provider email richiedono anche di abilitare l’accesso al server SMTP nelle impostazioni del tuo account. Inoltre, se non ti senti a tuo agio a implementare l’autorizzazione OAuth nel tuo software, puoi provare a creare una password separata per l’applicazione nelle impostazioni del tuo account.

Quindi, se hai completato tutti i lavori preparatori, è il momento di iniziare a inviare messaggi. Puoi usare la libreria Aspose.Email per C++ per questo. Considera l’esempio più semplice:

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");

Usa questa opzione se desideri inviare una semplice email di testo.

Invia email con allegati usando C++

Se devi inviare un messaggio email complesso usando C++, la classe MailMessage sarà sicuramente utile. Ad esempio, per inviare un messaggio simile al precedente:

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

La classe MailMessage è uno strumento eccellente. Consente di inviare messaggi memorizzati nei formati di file EML e MSG (Outlook Message Format). Puoi anche usare questo formato per inviare allegati o persino oggetti iCalendar per organizzare o confermare la partecipazione. MailMessage ti permette di affinare la lista dei destinatari, CC e BCC. Puoi inviare una email con markup HTML. Puoi anche contrassegnare il messaggio con varie flag prima dell’invio, aggiungere metadati, crittografarlo, ecc.

Perché le persone scelgono Aspose.Email per C++ per l'invio di email?

Sì, Aspose.Email per C++ non è solo un’utilità per l’invio di messaggi email. È una soluzione completa che offre supporto per una varietà di attività legate all’invio, alla ricezione, alla memorizzazione e all’elaborazione delle email. Puoi essere sicuro che, svolgendo queste attività, non incorrerai nelle limitazioni della libreria. Studiamo questo argomento da molti anni e ne espandiamo costantemente le funzionalità.

Probabilmente ti sei imbattuto in piccole librerie emerse di recente. Risolvono facilmente e naturalmente un problema semplice che molti utenti incontrano. Ma appena fai un passo indietro, ti accorgi che continuando a usare quella modesta libreria, sei costretto a costruire costantemente supporti, alcuni moduli per aggirare le limitazioni della libreria, adattatori progettati per far amicizia tra la tua piccola libreria e un’altra, ecc. E ora la tua piccola soluzione ingegnosa non è più così ingegnosa. Inoltre, la invii al server, dove regolarmente e costantemente si autocancella, perché nessuno ha testato prima di te un tale zoo di agganci e integrazioni. Per quanto tu provi, prima o poi ti imbatterai comunque nei limiti di questa libreria. E dovrai cercare qualcosa di nuovo. Quindi, quando si tratta di lavorare con l’email, potresti voler considerare Aspose.Email per C++!

Ti offriamo non solo un client per lavorare con SMTP. Prima di tutto, non è l’unico protocollo per inviare email con C++. Con il nostro prodotto, puoi inviare email usando Exchange EWS e Microsoft Graph!

Ti abbiamo già illustrato le possibilità di MailMessage in questo articolo. Ma questo è solo uno degli strumenti per preparare le lettere da inviare. Puoi:

  • generare lettere da un modello usando TemplateEngine;
  • estrarre contenitori con lettere, grazie al supporto dei formati OST, PST e MBOX;
  • scaricare lettere dalla casella di posta usando il supporto dei protocolli IMAP, POP3, Exchange EWS e WebDav, così come Microsoft Graph;
  • convertire email da un formato all’altro.

Puoi ricevere facilmente una lettera usando il protocollo Exchange EWS. Sarà in formato MAPI. Ma puoi convertirla facilmente in formato EML, il che ti permetterà di inviarla successivamente tramite protocollo SMTP. Allo stesso tempo, puoi modificare la lista dei destinatari o il mittente della lettera in qualsiasi momento.

Come funziona l'invio di un'email usando C++ e SMTP?

Configurazione SMTP

Nel momento in cui crei un’istanza della classe SmtpClient, non accade nulla di speciale. Specifici semplicemente le impostazioni necessarie per poterti connettere in futuro a un server SMTP e inviare messaggi. Tutta la magia avviene alla prima chiamata al send metodo. Cosa sta accadendo in questo momento?

In effetti, tutto dipende dalle impostazioni che hai specificato. Consideriamo diverse opzioni. Supponiamo che tu abbia specificato l’host del server ma non la porta e il tipo di crittografia. In questo caso si avvia il meccanismo di selezione automatica delle impostazioni. Questo meccanismo consiste in tentativi successive di connettersi al server SMTP usando le porte standard e gli algoritmi di crittografia corrispondenti. Prima si tenta di connettersi al server tramite un canale criptato. Se fallisce, il meccanismo proverà a stabilire una connessione non criptata. Se non desideri utilizzare la versione non criptata del protocollo, specifica il metodo. Cosa sta accadendo in questo momento? SecurityOptions.SSL_AUTO impostazione. Questa impostazione permette anche di selezionare le impostazioni del server, ma controlla solo canali criptati.

Se è stato possibile stabilire una connessione con il server, viene effettuato un tentativo di autorizzazione. Se l’autorizzazione fallisce, il codice di errore viene salvato per future consultazioni. Il matcher proverà a connettersi in altri modi. Il messaggio sarà inviato se riesci a connetterti e ad autenticarti. Se la connessione fallisce, l’utente riceverà un codice di errore di autorizzazione (se ne è stato salvato uno durante la selezione). In questo modo l’utente potrà capire che ha inserito la password errata o ha commesso un altro errore. Se nessuna delle opzioni per porte e tipi di crittografia è adeguata e non siamo nemmeno arrivati al tentativo di autorizzazione, l’utente riceverà un errore che segnala impostazioni del server errate.

A proposito, va notato che il nostro SmtpClient (come tutti gli altri client della nostra libreria) può connettersi al server SMTP tramite un proxy. È possibile specificare le impostazioni del server proxy durante l’inizializzazione.

Autorizzazione client SMTP

SmtpClient supporta più di semplici metodi di connessione. Supporta anche diversi metodi di autorizzazione. Ad esempio, puoi usare il meccanismo OAuth. Per farlo, forniamo diversi strumenti contemporaneamente.

Prima di tutto, c’è TokenProvider. È la classe che contiene tutti i dati necessari per memorizzare e aggiornare il token OAuth. In questo caso, devi eseguire l’autorizzazione OAuth da solo e salvare tutte le informazioni necessarie ricevute dal server OAuth. RefreshToken gioca un ruolo chiave qui. È un token aggiuntivo rilasciato dal server di autorizzazione, insieme a AccessToken. La loro differenza è che AccessToken, di norma, è valido solo per un certo periodo di tempo, mentre RefreshToken è valido per molto più tempo, o addirittura indefinitamente (finché l’utente non lo revoca). Grazie a RefreshToken, la classe TokenProvider può sempre aggiornare un AccessToken se quest’ultimo non è più valido.

Un’altra opzione è l’interfaccia ITokenProvider. In questo caso, puoi non solo implementare il meccanismo OAuth da solo, ma anche passarlo a SmtpClient affinché lo utilizzi quando necessario.

Va notato che il meccanismo OAuth non è sempre necessario. A volte è molto più semplice accedere con nome utente e password. E per questo non è necessario riconfigurare il tuo account email, rinunciare all’autenticazione a due fattori, ecc. Esiste una soluzione più sicura: una password separata per l’applicazione. Per sfruttare questa funzione, dovresti controllare le impostazioni del tuo account email. Molto probabilmente la password per l’applicazione verrà generata automaticamente quando la imposti nel tuo account. Non dimenticare di salvarla da qualche parte. Raccomandiamo inoltre di limitare il più possibile i permessi dell’applicazione durante la configurazione. Ovviamente, se un aggressore ottiene questa password, non potrà appropriarsi del tuo account, ma potrà comunque compiere molte azioni spiacevoli. E qui non puoi fare nulla, perché la password è l’unica cosa che protegge i tuoi dati dagli intrusi. In generale, lo strumento è molto comodo, ma riduce la sicurezza del tuo account; usalo a tuo rischio.

Invio di email via SMTP con C++

Quindi, la connessione al server è stabilita e l’autorizzazione è avvenuta con successo. È il momento di inviare le lettere. Per l’invio si utilizza un oggetto della classe MailMessage. Tecnica­mente, puoi semplicemente passare tutti i dati necessari al metodo di invio. Ma, in realtà, verranno comunque raccolti nell’oggetto MailMessage. Successivamente, grazie alla capacità della classe MailMessage di serializzare nel formato EML, otteniamo lo stream di dati necessario da passare al nostro server SMTP. Così, diamo al server il comando di inviare una lettera e trasferiamo tutti i contenuti della lettera in forma di dati testuali. Se nella lettera vengono trasmessi dati binari, ad esempio sotto forma di file allegati, questi dati vengono codificati in formato Base64 e i metadati della lettera indicano che il destinatario dovrà decodificarli. Il server SMTP può verificare la correttezza del messaggio ricevuto (ad esempio controllare il campo FROM con l’account del mittente sul server) e può anche integrare i metadati del messaggio a suo piacimento. Poi, il server invierà l’email ai destinatari, la cui lista otterrà anch’essa dai metadati dell’email.