Aspose.Email  dla C ++

Wyślij e-mail C++

Jak używać C++ i SMTP do wysyłania wiadomości e-mail z załącznikiem lub iCalendar

  Pobierz darmową wersję próbną

Z reguły protokół SMTP służy do wysyłania wiadomości e-mail. Aby wysłać wiadomość, potrzebujesz dostępu do serwera SMTP. Musisz znaleźć adres serwera SMTP w sieci, określić port i typ szyfrowania, logowania i metody autoryzacji. Niektórzy dostawcy poczty e-mail wymagają również włączenia dostępu do serwera SMTP w ustawieniach konta. Ponadto, jeśli nie czujesz się komfortowo wdrażając autoryzację OAuth w swoim oprogramowaniu, możesz spróbować utworzyć osobne hasło do aplikacji w ustawieniach konta.

Jeśli więc wykonałeś wszystkie prace przygotowawcze, nadszedł czas, aby rozpocząć wysyłanie wiadomości. W tym celu można użyć biblioteki Aspose.Email for C ++. Rozważmy najprostszy przykład:

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

Użyj tej opcji, jeśli chcesz wysłać prostą wiadomość tekstową.

Wysyłanie wiadomości e-mail z załącznikami za pomocą C ++

Jeśli chcesz wysłać złożoną wiadomość e-mail za pomocą C ++, klasa MailMessage z pewnością się przyda. Na przykład, aby wysłać wiadomość podobną do poprzedniej:

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

Klasa MailMessage to świetne narzędzie. Umożliwia wysyłanie wiadomości przechowywanych w formatach plików EML i MSG (Outlook Message Format). Możesz także użyć tego formatu do wysyłania załączników, a nawet obiektów iCalendar w celu skonfigurowania lub potwierdzania obecności. MailMessage umożliwia precyzyjne dostosowanie listy odbiorców, odbiorców Cc i Bcc. Możesz wysłać wiadomość e-mail ze znacznikami HTML. Możesz również oznaczyć wiadomość różnymi flagami przed jej wysłaniem, dodać metadane, zaszyfrować ją itp.

Dlaczego ludzie wybierają Aspose.Email for C ++ do wysyłania wiadomości e-mail?

Tak, Aspose.Email for C ++ to nie tylko narzędzie do wysyłania wiadomości e-mail. Jest to kompleksowe rozwiązanie, które zapewnia kompleksowe wsparcie dla różnorodnych zadań związanych z wysyłaniem, odbieraniem, przechowywaniem i przetwarzaniem wiadomości e-mail. I możesz być pewien, że podczas wykonywania tych zadań nie napotkasz ograniczeń biblioteki. Badamy ten temat od wielu lat i stale poszerzamy jego funkcjonalność.

Prawdopodobnie natknąłeś się na małe biblioteki, które pojawiły się stosunkowo niedawno. Łatwo i naturalnie rozwiązują prosty problem, z którym boryka się wielu użytkowników. Ale jak tylko trochę się odsuwasz, zdajesz sobie sprawę, że kontynuując korzystanie z tej bezpretensjonalnej, jesteś zmuszony do ciągłego ogrodzenia kul, niektórych modułów omijających ograniczenia bibliotecznych, adapterów zaprojektowanych do zaprzyjaźnienia się z małą biblioteką z inną małą biblioteką itp. A teraz twoje małe fajne rozwiązanie nie jest już takie fajne. Co więcej, wysyłasz go na serwer, gdzie regularnie i konsekwentnie strzela sobie w stopę, bo nikt przed tobą nie przetestował takiego zoo kul i integracji. I bez względu na to, jak bardzo się starasz, prędzej czy później nadal napotkasz ograniczenia tej biblioteki. I musisz szukać czegoś nowego. Tak więc, jeśli chodzi o pracę z pocztą elektroniczną, warto rozważyć Aspose.Email dla C ++!

Oferujemy nie tylko klienta do pracy z SMTP. Po pierwsze, jest to daleki od jedynego protokołu do wysyłania wiadomości e-mail z C ++. Dzięki naszemu produktowi możesz wysyłać wiadomości e-mail za pomocą Exchange EWS i Microsoft Graph!

Powiedzieliśmy już o możliwościach MailMessage w tym artykule. Ale to dalekie od jedynego narzędzia do przygotowywania listów do wysyłania. Możesz:

  • generować litery z szablonu za pomocą TemplateEngine;
  • rozpakuj pojemniki z literami, dzięki obsłudze formatów OST, PST i MBOX;
  • pobieraj listy ze skrzynki pocztowej za pomocą protokołów IMAP, POP3, Exchange EWS i WebDAV, a także Microsoft Graph;
  • konwertuj wiadomości e-mail z jednego formatu do drugiego.

Możesz łatwo otrzymać list za pomocą protokołu Exchange Ews. Będzie w formacie MAPI. Ale możesz łatwo przekonwertować go na format EML, co pozwoli ci wysłać go później za pośrednictwem protokołu SMTP. Jednocześnie możesz zmienić listę odbiorców lub nadawcę listu w dowolnym momencie.

Jak działa wysyłanie wiadomości e-mail za pomocą C++ i SMTP?

Konfiguracja SMTP

W momencie utworzenia instancji klasy SMTPClient nie dzieje się nic specjalnego. Wystarczy określić liczbę ustawień, które pozwolą Ci w przyszłości połączyć się z serwerem SMTP w celu wysyłania wiadomości. Cała magia dzieje się przy pierwszym telefonie do send metoda. Co się dzieje w tej chwili?

W rzeczywistości wszystko zależy od ustawień, które określiłeś. Rozważmy kilka opcji. Powiedzmy, że podałeś hosta serwera, ale nie określiłeś portu i typu szyfrowania. W takim przypadku uruchomi się mechanizm automatycznego wyboru ustawień. Mechanizm ten składa się z kolejnych prób połączenia z serwerem SMTP przy użyciu standardowych portów i odpowiednich algorytmów szyfrowania. Najpierw podejmuje się próbę połączenia z serwerem przez zaszyfrowany kanał. Ale jeśli się nie powiedzie, mechanizm spróbuje ustanowić niezaszyfrowane połączenie. Jeśli nie chcesz używać niezaszyfrowanej wersji protokołu, określ SecurityOptions.SSL_AUTO ustawienie. To ustawienie pozwala również wybrać ustawienia serwera, ale sprawdza tylko zaszyfrowane kanały.

Jeśli możliwe było nawiązanie połączenia z serwerem, podejmuje się próbę autoryzacji. Jeśli autoryzacja nie powiedzie się, kod błędu zostanie zapisany na przyszłość. Dopasowacz spróbuje połączyć się na inne sposoby. Wiadomość zostanie wysłana, jeśli będziesz mógł się połączyć i zalogować. Jeśli połączenie się nie powiedzie, użytkownik otrzyma kod błędu autoryzacji (jeśli został zapisany podczas wyboru). Dzięki temu użytkownik będzie mógł zrozumieć, że wprowadził niewłaściwe hasło lub popełnił inny błąd. Jeśli żadna z opcji portów i typów szyfrowania nie pasuje, a nawet nie doszliśmy do próby autoryzacji, użytkownik otrzyma błąd powiadamiający o nieprawidłowych ustawieniach serwera.

Nawiasem mówiąc, należy zauważyć, że nasz SMTPClient (podobnie jak wszyscy inni klienci naszej biblioteki) może łączyć się z serwerem SMTP za pośrednictwem serwera proxy. Możesz także określić ustawienia serwera proxy podczas inicjalizacji.

Autoryzacja klienta SMTP

SMTPClient obsługuje więcej niż tylko różne metody połączenia. Obsługuje również różne metody autoryzacji. Na przykład możesz użyć mechanizmu OAuth. Aby to zrobić, zapewniamy kilka narzędzi jednocześnie.

Przede wszystkim jest to TokenProvider. Jest to klasa, która zawiera wszystkie dane niezbędne do przechowywania i odświeżania tokena OAuth. W takim przypadku musisz samodzielnie wykonać autoryzację OAuth i zapisać wszystkie niezbędne informacje otrzymane z serwera OAuth. RefreshToken odgrywa tutaj kluczową rolę. Jest to dodatkowy token wydany przez serwer autoryzacji wraz z AccessToken. Ich różnica polega na tym, że AccessToken z reguły jest ważny tylko przez pewien okres czasu. Natomiast RefreshToken jest ważny znacznie dłużej, a nawet w nieskończoność (dopóki użytkownik go nie cofnie). Dzięki RefreshToken klasa TokenProvider zawsze może odświeżyć AccessToken, jeśli ten ostatni nie jest już ważny.

Inną opcją jest interfejs ITokenProvider. W takim przypadku możesz nie tylko samodzielnie zaimplementować mechanizm OAuth, ale także przekazać go SMTPClientowi, aby sam go używał w razie potrzeby.

Należy zauważyć, że mechanizm OAuth nie zawsze jest konieczny. Czasami znacznie łatwiej jest zalogować się za pomocą nazwy użytkownika i hasła. W tym celu nie musisz w ogóle konfigurować konta e-mail, odmawiać autoryzacji dwuskładnikowej itp.Istnieje bezpieczniejsze rozwiązanie - jest to osobne hasło do aplikacji. Aby skorzystać z tej funkcji, powinieneś zajrzeć do ustawień konta e-mail. Najprawdopodobniej hasło do aplikacji zostanie wygenerowane automatycznie po skonfigurowaniu go na swoim koncie. Nie zapomnij go gdzieś zapisać. Zalecamy również maksymalne ograniczenie uprawnień aplikacji podczas konfiguracji. Oczywiście, jeśli atakujący uzyska dostęp do tego hasła, nie będzie w stanie dostosować twojego konta, ale nadal może zrobić wiele nieprzyjemnych rzeczy. I tutaj nie możesz nic zrobić, ponieważ hasło jest jedyną rzeczą, która chroni twoje dane przed intruzami. Ogólnie rzecz biorąc, narzędzie jest bardzo wygodne, ale obniża bezpieczeństwo konta, używaj go na własne ryzyko.

Wysyłanie wiadomości e-mail przez SMTP z C ++

Tak więc połączenie z serwerem zostało nawiązane, a autoryzacja zakończyła się sukcesem. Czas wysłać listy. Do wysyłania używany jest obiekt klasy MailMessage. Technicznie, możesz po prostu przekazać wszystkie niezbędne dane do metody wysyłania. Ale w rzeczywistości nadal będą zbierane w obiekcie MailMessage. Ponadto, dzięki możliwości serializacji klasy MailMessage do formatu EML, otrzymujemy niezbędny strumień danych, który można przekazać do naszego serwera SMTP. W ten sposób dajemy serwerowi polecenie wysłania listu i przeniesienia do niego całej zawartości listu w postaci danych tekstowych. Jeśli dane binarne są przesyłane w liście, na przykład w postaci załączonych plików, dane te są kodowane w formacie Base64, a metadane listu wskazują, że odbiorca będzie musiał je odkodować z powrotem. Serwer SMTP może sprawdzić poprawność odebranej wiadomości (na przykład sprawdzić pole FROM z kontem nadawcy na serwerze), a także uzupełnić metadane wiadomości według własnego uznania. Następnie serwer wyśle wiadomość e-mail do odbiorców, której listę otrzyma również z metadanych wiadomości e-mail.