Skicka e-post C++
Hur man använder C ++ och SMTP för att skicka e-post med bilaga eller iCalendar
Ladda ner gratis prövningSom regel används SMTP-protokollet för att skicka e-postmeddelanden. Du behöver åtkomst till en SMTP-server för att skicka ett meddelande. Du måste hitta adressen till SMTP-servern i nätverket, bestämma porten och typen av kryptering, inloggning och auktoriseringsmetod. Vissa e-postleverantörer kräver också att du aktiverar åtkomst till SMTP-servern i dina kontoinställningar. Om du inte är bekväm med att implementera OAuth-auktorisering i din programvara kan du försöka skapa ett separat lösenord för applikationen i dina kontoinställningar.
Så om du har gjort allt förberedande arbete är det dags att börja skicka meddelanden. Du kan använda biblioteket Aspose.Email för C ++ för detta. Tänk på det enklaste exemplet:
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");
Använd det här alternativet om du vill skicka ett enkelt textmeddelande.
Skicka e-post med bilagor med C ++
Om du behöver skicka ett komplext e-postmeddelande med C ++ kommer MailMessage-klassen definitivt att vara till nytta. Till exempel för att skicka ett meddelande som liknar det föregående:
auto message = MakeObject<MailMessage>(u"login@gmail.com", u"to@aspose.com", u"subject", u"body");
smtpClient->Send(message);
MailMessage-klassen är ett bra verktyg. Det låter dig skicka meddelanden lagrade i EML- och MSG (Outlook Message Format) filformat. Du kan också använda det här formatet för att skicka bilagor eller till och med iCalendar-objekt för att ställa in eller bekräfta närvaro. MailMessage låter dig finjustera din lista över mottagare, Cc- och Bcc-mottagare. Du kan skicka ett e-postmeddelande med HTML-markering. Du kan också markera meddelandet med olika flaggor innan du skickar det, lägga till metadata, kryptera det etc.
Varför väljer folk Aspose.Email för C ++ för att skicka e-post?
Ja, Aspose.Email för C++ är inte bara ett verktyg för att skicka e-postmeddelanden. Detta är en omfattande lösning som ger omfattande stöd för en mängd olika uppgifter relaterade till att skicka, ta emot, lagra och bearbeta e-post. Och du kan vara säker på att när du utför dessa uppgifter kommer du inte att stöta på bibliotekets begränsningar. Vi har studerat detta ämne i många år och utökar ständigt dess funktionalitet.
Du har förmodligen stött på små bibliotek som har dykt upp relativt nyligen. De löser enkelt och naturligt ett enkelt problem som många användare står inför. Men så fort du går åt sidan, inser du att genom att fortsätta använda den här opretentiösa, tvingas du ständigt stänga kryckor, vissa moduler för att kringgå bibliotekets begränsningar, adaptrar utformade för att bli vän med ditt lilla bibliotek med ett annat litet bibliotek, etc. Och nu är din lilla smarta lösning inte så snygg längre. Dessutom skickar du den till servern, där den regelbundet och konsekvent skjuter sig själv i foten, eftersom ingen har testat en sådan zoo av kryckor och integrationer före dig. Och oavsett hur hårt du försöker, förr eller senare kommer du fortfarande att stöta på begränsningarna i detta bibliotek. Och du måste leta efter något nytt. Så när det gäller att arbeta med e-post, kanske du vill överväga Aspose.Email för C++!
Vi erbjuder dig inte bara en klient för att arbeta med SMTP. För det första är det långt ifrån det enda protokollet för att skicka e-post med C ++. Med vår produkt kan du skicka e-post med Exchange EWS och Microsoft Graph!
Vi har redan berättat om möjligheterna med MailMessage i den här artikeln. Men det här är långt ifrån det enda verktyget för att förbereda brev för att skicka. Du kan:
- generera bokstäver från en mall med TemplateEngine;
- packa upp behållare med bokstäver, tack vare stöd av OST-, PST- och MBOX-format;
- ladda ner brev från brevlådan med stöd av IMAP-, POP3-, Exchange EWS- och WebDAV-protokoll samt Microsoft Graph;
- konvertera e-post från ett format till ett annat.
Du kan enkelt få ett brev med Exchange EWS-protokollet. Det kommer att vara i MAPI-format. Men du kan enkelt konvertera det till EML-format, vilket gör att du kan skicka det senare via SMTP-protokoll. Samtidigt kan du när som helst ändra listan över mottagare eller brevets avsändare.
Hur fungerar det att skicka ett e-postmeddelande med C ++ och SMTP?
SMTP-konfiguration
I det ögonblick du skapar en instans av klassen SmtpClient händer inget speciellt. Du anger helt enkelt antalet inställningar som gör att du kan ansluta till en SMTP-server i framtiden för att skicka meddelanden. All magi händer vid det första samtalet till send
metod. Vad händer just nu?
Faktum är att allt beror på vilka inställningar du har angett. Låt oss överväga flera alternativ. Låt oss säga att du har angett servervärd men inte har angett porten och krypteringstypen. I det här fallet startar mekanismen för automatiskt val av inställningar. Denna mekanism består av successiva försök att ansluta till SMTP-servern med hjälp av standardportar och motsvarande krypteringsalgoritmer. Först görs ett försök att ansluta till servern via en krypterad kanal. Men om det misslyckas kommer mekanismen att försöka upprätta en okrypterad anslutning. Om du inte vill använda den icke-krypterade versionen av protokollet anger du SecurityOptions.SSL_AUTO
inställning. Med den här inställningen kan du också välja serverinställningar, men kontrollerar bara krypterade kanaler.
Om det var möjligt att upprätta en anslutning till servern görs ett auktoriseringsförsök. Om auktoriseringen misslyckas sparas felkoden för framtiden. Matcharen kommer att försöka ansluta på andra sätt. Meddelandet skickas om du kan ansluta och logga in. Om anslutningen misslyckas får användaren en auktoriseringsfelkod (om en sparades under valet). Så användaren kommer att kunna förstå att han angav fel lösenord eller gjorde något annat misstag. Om inget av alternativen för portar och krypteringstyper passar och vi inte ens kom till auktoriseringsförsöket får användaren ett felmeddelande om felaktiga serverinställningar.
Förresten bör det noteras att vår SmtpClient (som alla andra klienter i vårt bibliotek) kan ansluta till SMTP-servern via en proxy. Du kan också ange proxyserverinställningar under initieringen.
SMTP-klientauktorisering
SmtpClient stöder mer än bara olika anslutningsmetoder. Det stöder också olika auktoriseringsmetoder. Du kan till exempel använda OAuth-mekanismen. För att göra detta tillhandahåller vi flera verktyg samtidigt.
Först och främst är det TokenProvider. Detta är klassen som innehåller all nödvändig data för att lagra och uppdatera OAuth-token. I det här fallet måste du utföra OAuth-auktoriseringen själv och spara all nödvändig information som erhållits från OAuth-servern. RefreshToken spelar en nyckelroll här. Detta är en extra token utfärdad av auktoriseringsservern, tillsammans med AccessToken. Deras skillnad är att AccessToken som regel endast gäller under en viss tidsperiod. Medan RefreshToken är giltigt mycket längre, eller till och med på obestämd tid (tills användaren återkallar det). Tack vare RefreshToken kan klassen TokenProvider alltid uppdatera en AccessToken om den senare inte längre är giltig.
Ett annat alternativ är ITokenProvider-gränssnittet. I det här fallet kan du inte bara implementera OAuth-mekanismen själv utan också skicka den till SmtpClient så att den använder den själv efter behov.
Det bör noteras att OAuth-mekanismen inte alltid är nödvändig. Ibland är det mycket lättare att logga in med ett användarnamn och lösenord. Och för detta behöver du inte konfigurera ditt e-postkonto alls, vägra tvåfaktorsautorisering etc. Det finns en säkrare lösning - det här är ett separat lösenord för applikationen. För att dra nytta av den här funktionen bör du titta på dina e-postkontoinställningar. Troligtvis kommer lösenordet för applikationen att genereras automatiskt när du ställer in det i ditt konto. Glöm inte att spara den någonstans. Vi rekommenderar också att du begränsar programmets behörigheter så mycket som möjligt under konfigurationen. Naturligtvis, om en angripare får tillgång till det här lösenordet, kommer han inte att kunna anpassa ditt konto, men han kan fortfarande göra många obehagliga saker. Och här kan du inte göra någonting, eftersom lösenordet är det enda som skyddar dina data från inkräktare. I allmänhet är verktyget väldigt bekvämt, men sänker säkerheten för ditt konto, använd det på egen risk.
Skicka e-post via SMTP med C ++
Så anslutningen till servern är etablerad och auktoriseringen lyckades. Det är dags att skicka brev. För att skicka används ett objekt i klassen MailMessage. Tekniskt kan du bara skicka all nödvändig data till sändningsmetoden. Men i själva verket kommer de fortfarande att samlas in i MailMessage-objektet. Vidare, tack vare MailMessage-klassens förmåga att serialisera till EML-formatet, får vi den nödvändiga dataströmmen som kan skickas till vår SMTP-server. Således ger vi servern ett kommando att skicka ett brev och överföra allt innehåll i brevet till det i form av textdata. Om binära data överförs i brevet, till exempel i form av bifogade filer, kodas dessa data i Base64-format, och metadata för brevet indikerar att mottagaren måste avkoda den tillbaka. SMTP-servern kan kontrollera riktigheten av det mottagna meddelandet (till exempel kontrollera FROM-fältet med avsändarens konto på servern), samt komplettera meddelandets metadata efter eget gottfinnande. Sedan skickar servern e-postmeddelandet till mottagarna, en lista som den också kommer att få från e-postets metadata.