Aspose.Email  pro C++

Odeslat e-mail C++

Jak používat C ++ a SMTP k odesílání e-mailů s přílohou nebo iCalendarem

  Stáhnout zkušební verzi zdarma

Protokol SMTP se zpravidla používá k odesílání e-mailových zpráv. K odeslání zprávy potřebujete přístup k serveru SMTP. Musíte najít adresu serveru SMTP v síti, určit port a typ šifrování, přihlašovací a autorizační metodu. Někteří poskytovatelé e-mailu také vyžadují, abyste povolili přístup k serveru SMTP v nastavení účtu. Pokud také nejste spokojeni s implementací autorizace OAuth ve vašem softwaru, můžete zkusit vytvořit samostatné heslo pro aplikaci v nastavení účtu.

Pokud jste tedy provedli všechny přípravné práce, je čas začít odesílat zprávy. K tomu můžete použít knihovnu Aspose.Email pro C++. Zvažte nejjednodušší příklad:

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

Tuto možnost použijte, pokud chcete odeslat jednoduchý textový e-mail.

Odeslat e-mail s přílohami pomocí C ++

Pokud potřebujete poslat složitou e-mailovou zprávu pomocí C ++, třída MailMessage se určitě hodí. Chcete-li například odeslat zprávu podobnou 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 souborů EML a MSG (Outlook Message Format). Tento formát můžete také použít k odesílání příloh nebo dokonce objektů iCalendar pro nastavení nebo potvrzení docházky. MailMessage umožňuje doladit seznam příjemců, příjemců Cc a Bcc. Můžete odeslat e-mail s označením HTML. Zprávu můžete také před odesláním označit 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 nástroj pro odesílání e-mailových zpráv. Jedná se o komplexní řešení, které poskytuje komplexní podporu pro celou řadu úkolů souvisejících 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. Toto téma studujeme již mnoho let a neustále rozšiřujeme jeho funkčnost.

Pravděpodobně jste narazili na malé knihovny, které se objevily relativně nedávno. Snadno a přirozeně řeší jednoduchý problém, kterému čelí mnoho uživatelů. Ale jakmile trochu ustoupíte stranou, uvědomíte si, že pokračováním v používání tohoto nenáročného jste nuceni neustále oplocovat berle, některé moduly, které obcházejí omezení knihovny, adaptéry určené k spřátelení s vaší malou knihovnou s jinou malou knihovnou atd. A teď vaše malé šikovné řešení už není tak šikovné. Navíc ji posíláte na server, kde se pravidelně a důsledně střílí do nohy, protože takovou zoo berlí a integrací před vámi nikdo netestoval. A bez ohledu na to, jak moc se snažíte, dříve nebo později narazíte na omezení této knihovny. A musíte hledat něco nového. Takže pokud jde o práci s e-mailem, možná budete chtít zvážit Aspose.Email pro C++!

Nabízíme Vám nejen klienta pro práci se SMTP. Za prvé, není to zdaleka jediný protokol pro odesílání e-mailů s C ++. S naším produktem můžete posílat e-maily pomocí Exchange EWS a Microsoft Graph!

Již jsme vám řekli o možnostech MailMessage v tomto článku. Ale to není zdaleka jediný nástroj pro přípravu dopisů pro odesílání. Můžete:

  • generovat písmena ze šablony pomocí TemplateEngine;
  • rozbalte kontejnery s písmeny díky podpoře formátů OST, PST a MBOX;
  • stahovat dopisy z poštovní 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 do druhého.

Můžete snadno obdržet dopis pomocí protokolu Exchange Ews. Bude ve formátu MAPI. Můžete jej však snadno převést do formátu EML, což vám umožní odeslat jej později prostřednictvím protokolu 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?

Konfigurace SMTP

V okamžiku, kdy vytvoříte instanci třídy SmtpClient, nic zvláštního se nestane. Jednoduše zadáte počet nastavení, která vám umožní připojit se k serveru SMTP v budoucnu a odesílat zprávy. Veškeré kouzlo se děje při prvním volání do send metoda. Co se děje v tuto chvíli?

Ve skutečnosti to vše závisí na tom, jaké nastavení jste zadali. Zvažme několik možností. Řekněme, že jste zadali hostitele serveru, ale nezadali jste port a typ šifrování. V tomto případě se spustí mechanismus automatického výběru nastavení. Tento mechanismus se skládá z postupných pokusů o připojení k serveru SMTP pomocí standardních portů a odpovídajících šifrovacích algoritmů. Nejprve je proveden pokus o připojení k serveru přes šifrovaný kanál. Pokud se však nepodaří, mechanismus se pokusí 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 bylo možné navázat spojení se serverem, provede se pokus o autorizaci. Pokud autorizace selže, kód chyby se uloží do budoucna. Matcher se pokusí připojit jinými způsoby. Zpráva bude odeslána, pokud se můžete připojit a přihlásit. Pokud připojení selže, uživatel obdrží kód chyby autorizace (pokud byl při výběru uložen). Uživatel tak bude schopen pochopit, že zadal nesprávné heslo nebo udělal jinou chybu. Pokud se žádná z možností pro porty a typy šifrování nehodí a my jsme se ani nedostali k pokusu o autorizaci, uživatel obdrží chybu upozorňující na nesprávné nastavení serveru.

Mimochodem, je třeba poznamenat, že náš SMTPClient (stejně jako všichni ostatní klienti naší knihovny) se může připojit k serveru SMTP prostřednictvím proxy. Během inicializace můžete také zadat nastavení serveru proxy.

Autorizace klienta SMTP

SmtpClient podporuje více než jen různé způsoby připojení. Podporuje také různé metody autorizace. Můžete například použít mechanismus OAuth. K tomu poskytujeme několik nástrojů najednou.

Za prvé, je to TokenProvider. Toto je třída, která obsahuje všechna potřebná data pro uložení a obnovení tokenu OAuth. V takovém případě musíte provést autorizaci OAuth sami a uložit všechny potřebné informace přijaté ze serveru OAuth. RefreshToken zde hraje klíčovou roli. Toto je další token vydaný autorizačním serverem spolu s AccessToken. Jejich rozdíl spočívá v tom, že AccessToken je zpravidla platný pouze po určitou dobu. Zatímco RefreshToken je platný mnohem déle, nebo dokonce neomezeně (dokud jej uživatel nezruší). Díky RefreshToken může třída TokenProvider vždy aktualizovat AccessToken, pokud již není platný.

Další možností je rozhraní ITokenProvider. V tomto případě můžete mechanismus OAuth nejen implementovat sami, ale také jej předat SmtpClientu, aby jej podle potřeby sám používal.

Je třeba poznamenat, že mechanismus OAuth není vždy nutný. Někdy je mnohem snazší se přihlásit pomocí uživatelského jména a hesla. A proto nemusíte vůbec překonfigurovat svůj e-mailový účet, odmítnout dvoufaktorovou autorizaci apod. Existuje bezpečnější řešení - jedná se o samostatné heslo pro aplikaci. Chcete-li využít této funkce, měli byste se podívat do nastavení e-mailového účtu. S největší pravděpodobností bude heslo pro aplikaci vygenerováno automaticky, když jej nastavíte ve svém účtu. Nezapomeňte to někam uložit. Doporučujeme také co nejvíce omezit oprávnění vaší aplikace během konfigurace. Samozřejmě, pokud útočník získá přístup k tomuto heslu, nebude schopen přizpůsobit váš účet, ale stále může dělat spoustu nepříjemných věcí. A tady nemůžete nic dělat, protože heslo je jediná věc, která chrání vaše data před vetřelci. Obecně je tento nástroj velmi pohodlný, ale snižuje bezpečnost vašeho účtu, používejte jej na vlastní riziko.

Odeslání e-mailu přes SMTP s C ++

Připojení k serveru je tedy navázáno a autorizace byla úspěšná. Je čas posílat dopisy. Pro odeslání se používá objekt třídy MailMessage. Technicky můžete jednoduše předat všechna potřebná data metodě odeslání. Ve skutečnosti však budou stále shromažďovány v objektu MailMessage. Dále díky schopnosti třídy MailMessage serializovat do formátu EML získáme potřebný datový tok, který lze předat našemu SMTP serveru. Dáme tedy serveru příkaz k odeslání dopisu a přenosu veškerého obsahu dopisu do něj ve formě textových dat. Pokud jsou binární data přenášena v dopise, například ve formě připojených souborů, jsou tato data kódována ve formátu Base64 a metadata dopisu naznačují, že příjemce je bude muset dekódovat zpět. Server SMTP může zkontrolovat správnost přijaté zprávy (například zkontrolovat pole FROM s účtem odesílatele na serveru), stejně jako doplnit metadata zprávy podle svého uvážení. Poté server pošle e-mail příjemcům, jejichž seznam také získá z metadat e-mailu.