Odeslání e‑mailu v C++
Jak použít C++ a SMTP k odeslání e‑mailu s přílohou nebo iCalendar
Stáhnout zkušební verzi zdarmaObvykle se k odesílání e‑mailových zpráv používá protokol SMTP. K odeslání zprávy potřebujete přístup k SMTP serveru. Musíte najít adresu SMTP serveru v síti, určit port a typ šifrování, přihlašovací a autorizační metodu. Některé poskytovatelé e‑mailu také vyžadují povolení přístupu k SMTP serveru v nastavení účtu. Také, pokud vám není pohodlné implementovat OAuth autorizaci ve vašem softwaru, můžete si v nastavení účtu vytvořit samostatné heslo pro aplikaci.
Takže pokud máte hotovou veškerou přípravu, je čas začít odesílat zprávy. K tomu můžete použít knihovnu Aspose.Email pro C++. Uvažujte o nejjednodušším příkladu:
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");
Použijte tuto možnost, pokud chcete odeslat jednoduchý textový e‑mail.
Odesílání e‑mailu s přílohami pomocí C++
Pokud potřebujete odeslat složitou e‑mailovou zprávu pomocí C++, bude třída MailMessage určitě užitečná. Například pro odeslání zprávy podobné té předchozí:
auto message = MakeObject<MailMessage>(u"login@gmail.com", u"to@aspose.com", u"subject", u"body");
smtpClient->Send(message);
Třída MailMessage je skvělý nástroj. Umožňuje odesílat zprávy uložené ve formátech EML a MSG (Outlook Message Format). Tento formát můžete také použít k odeslání příloh nebo i objektů iCalendar pro nastavení či potvrzení účasti. MailMessage vám umožňuje podrobně upravit seznam příjemců, Cc a Bcc. Můžete odeslat e‑mail s HTML značkami. Můžete také před odesláním označit zprávu různými příznaky, přidat metadata, zašifrovat ji atd.
Proč lidé volí Aspose.Email pro C++ pro odesílání e‑mailů?
Ano, Aspose.Email pro C++ není jen utilita pro odesílání e‑mailových zpráv. Jedná se o komplexní řešení poskytující kompletní podporu pro různé úkoly související s odesíláním, přijímáním, ukládáním a zpracováním e‑mailů. A můžete si být jisti, že při provádění těchto úkolů nenarazíte na omezení knihovny. Studujeme toto téma již mnoho let a neustále rozšiřujeme její funkčnost.
Pravděpodobně jste narazili na malé knihovny, které se objevily nedávno. Snadno a přirozeně řeší jednoduchý problém, se kterým se potýká mnoho uživatelů. Ale jakmile se o trochu posunete, uvědomíte si, že při dalším používání této nenáročné knihovny jste nuceni neustále obcházet omezení, vytvářet různé moduly, adaptéry a podobně. A najednou vaše drobná praktická řešení nejsou tak praktická. Navíc ji posíláte na server, kde se pravidelně a konzistentně může zhroutit, protože takový „zoo“ obcházení a integrací nikdo před vámi nepředběhl. A ať se snažíte jakkoli, dříve či později narazíte na limity této knihovny a budete muset hledat něco nového. Proto, pokud jde o práci s e‑mailem, můžete zvážit Aspose.Email pro C++!
Nabízíme vám nejen klienta pro práci se SMTP. Především to není jediný protokol pro odesílání e‑mailů v C++. S naším produktem můžete odesílat e‑maily pomocí Exchange EWS a Microsoft Graph!
Už jsme vám v tomto článku představili možnosti třídy MailMessage. Ale to není jediný nástroj pro přípravu dopisů k odeslání. Můžete:
- generovat dopisy z šablony pomocí TemplateEngine;
- rozbalovat kontejnery s dopisy díky podpoře formátů OST, PST a MBOX;
- stahovat dopisy ze schránky pomocí podpory protokolů IMAP, POP3, Exchange EWS a WebDAV, a také Microsoft Graph;
- převádět e‑maily z jednoho formátu na druhý.
Můžete snadno přijmout dopis pomocí protokolu Exchange EWS. Bude ve formátu MAPI. Ale můžete jej snadno převést do formátu EML, což vám později umožní odeslat jej přes protokol SMTP. Zároveň můžete kdykoli změnit seznam příjemců nebo odesílatele dopisu.
Jak funguje odesílání e‑mailu pomocí C++ a SMTP?
SMTP konfigurace
Jakmile vytvoříte instanci třídy SmtpClient, nic zvláštního se nestane. Jednoduše zadáte množinu nastavení, která vám v budoucnu umožní připojit se k SMTP serveru a odesílat zprávy. Veškerá magie nastane až při prvním volání send metodu. Co se právě děje?
Ve skutečnosti vše závisí na tom, jaká nastavení jste zadali. Uvažujme několik možností. Řekněme, že jste zadali hostitele serveru, ale ne port ani typ šifrování. V tomto případě se spustí mechanismus automatického výběru nastavení. Tento mechanismus spočívá v postupných pokusech připojit se k SMTP serveru pomocí standardních portů a odpovídajících šifrovacích algoritmů. Nejprve se pokusí připojit přes šifrovaný kanál. Pokud selže, mechanizmus zkusí navázat nešifrované spojení. Pokud nechcete používat nešifrovanou verzi protokolu, zadejte SecurityOptions.SSL_AUTO nastavení. Toto nastavení také umožňuje vybrat nastavení serveru, ale kontroluje pouze šifrované kanály.
Pokud se podařilo navázat spojení se serverem, provede se pokus o autorizaci. Pokud autorizace selže, kód chyby se uloží pro pozdější použití. Matcher pak bude zkoušet připojení jinými způsoby. Zpráva bude odeslána, pokud se můžete připojit a přihlásit. Pokud spojení selže, uživatel obdrží kód chyby autorizace (pokud byl během výběru uložen). Uživatel tak pochopí, že zadal špatné heslo nebo udělal jinou chybu. Pokud žádná z možností portů a typů šifrování nevyhovuje a vůbec nedojde k pokusu o autorizaci, uživatel obdrží chybu informující o nesprávném nastavení serveru.
Mimochodem je třeba poznamenat, že náš SmtpClient (stejně jako všichni ostatní klienti naší knihovny) se dokáže připojit k SMTP serveru přes proxy. Během inicializace můžete také zadat nastavení proxy serveru.
Autorizace SMTP klienta
SmtpClient podporuje nejen různé způsoby připojení, ale také různé autorizační metody. Například můžete použít mechanismus OAuth. K tomu poskytujeme několik nástrojů najednou.
Nejprve je to TokenProvider. Jedná se o třídu, která obsahuje všechna potřebná data pro uložení a obnovu OAuth tokenu. V tomto případě musíte sami provést OAuth autorizaci a uložit všechny potřebné informace získané od OAuth serveru. Klíčovou roli zde hraje RefreshToken. Jedná se o doplňkový token vydaný autorizačním serverem spolu s AccessToken. Jejich rozdíl spočívá v tom, že AccessToken je obvykle platný jen po omezenou dobu, zatímco RefreshToken je platný mnohem déle, případně neomezeně (dokud jej uživatel neodvolá). Díky RefreshToken může třída TokenProvider kdykoli obnovit AccessToken, pokud již není platný.
Další možností je rozhraní ITokenProvider. V tomto případě můžete nejen sami implementovat mechanizmus OAuth, ale také jej předat SmtpClientu, aby jej používal podle potřeby.
Je třeba poznamenat, že mechanismus OAuth není vždy nutný. Někdy je mnohem jednodušší přihlásit se uživatelským jménem a heslem. K tomu nemusíte vůbec měnit nastavení e‑mailového účtu, rušit dvoufaktorovou autorizaci apod. Existuje bezpečnější řešení – samostatné heslo pro aplikaci. Abyste tuto funkci využili, podívejte se do nastavení svého e‑mailového účtu. Pravděpodobně bude heslo pro aplikaci vygenerováno automaticky při jeho nastavení v účtu. Nezapomeňte jej někde uložit. Doporučujeme také omezit oprávnění aplikace co nejvíce během konfigurace. Samozřejmě, pokud útočník získá přístup k tomuto heslu, nebude moci převzít váš účet, ale stále může udělat spoustu nepříjemných věcí. A zde nic neděláte, protože heslo je jediná věc, která chrání vaše data před vetřelci. Obecně je nástroj velmi pohodlný, ale snižuje zabezpečení vašeho účtu, používejte jej na vlastní nebezpečí.
Odesílání e‑mailu přes SMTP pomocí C++
Takže spojení se serverem je navázáno a autorizace byla úspěšná. Je čas odesílat dopisy. K odesílání se používá objekt třídy MailMessage. Technicky můžete všechna potřebná data předat přímo metodě send, ale ve skutečnosti budou i tak shromážděna v objektu MailMessage. Dále, díky schopnosti třídy MailMessage serializovat do formátu EML, získáme datový proud, který můžeme předat našemu SMTP serveru. Tím tím serveru dáme příkaz k odeslání dopisu a přeneseme mu celý obsah dopisu jako textová data. Pokud jsou v dopise přenášena binární data, například jako přiložené soubory, jsou tato data kódována ve formátu Base64 a metadata dopisu naznačují, že příjemce je bude muset zpětně dekódovat. SMTP server může zkontrolovat správnost přijaté zprávy (např. ověřit pole FROM s účtem odesílatele na serveru) a také doplnit metadata zprávy dle vlastního uvážení. Pak server odešle e‑mail příjemcům, jejichž seznam získá také z metadat e‑mailu.