Aspose.Email  для C++

Надіслати електронну пошту C++

Як використовувати C ++ та SMTP для надсилання електронної пошти з вкладенням або iCalendar

  Завантажити безкоштовну пробну версію

Як правило, для відправки повідомлень електронної пошти використовується протокол SMTP. Для того, щоб надіслати повідомлення, потрібен доступ до SMTP-сервера. Потрібно знайти адресу SMTP-сервера в мережі, визначити порт і тип шифрування, спосіб входу і авторизації. Деякі постачальники електронної пошти також вимагають включити доступ до сервера SMTP в налаштуваннях облікового запису. Крім того, якщо вам не комфортно впроваджувати авторизацію OAuth у своєму програмному забезпеченні, ви можете спробувати створити окремий пароль для програми в налаштуваннях облікового запису.

Отже, якщо ви зробили всю підготовчу роботу, саме час приступати до відправки повідомлень. Для цього можна використовувати бібліотеку Aspose.Email для C++. Розглянемо найпростіший приклад:

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

Використовуйте цей параметр, якщо ви хочете надіслати простий текстовий лист.

Надсилати електронну пошту з вкладеннями за допомогою C++

Якщо вам потрібно відправити складне повідомлення електронної пошти за допомогою C++, клас MailMessage обов’язково стане в нагоді. Наприклад, щоб відправити повідомлення, схоже на попереднє:

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

Клас MailMessage є відмінним інструментом. Він дозволяє надсилати повідомлення, збережені у форматах файлів EML та MSG (Формат повідомлень Outlook). Ви також можете використовувати цей формат для надсилання вкладень або навіть об’єктів iCalendar для налаштування або підтвердження відвідуваності. MailMessage дозволяє вам точно налаштувати список одержувачів, одержувачів Cc та Bcc. Ви можете надіслати електронний лист з розміткою HTML. Ви також можете позначити повідомлення різними прапорцями перед відправкою, додати метадані, зашифрувати тощо.

Чому люди вибирають Aspose.Email для C++ для надсилання електронної пошти?

Так, Aspose.Email для C++ - це не просто утиліта для надсилання повідомлень електронної пошти. Це комплексне рішення, яке забезпечує комплексну підтримку різноманітних завдань, пов’язаних з відправкою, отриманням, зберіганням та обробкою електронної пошти. І ви можете бути впевнені, що при виконанні цих завдань ви не зіткнетеся з обмеженнями бібліотеки. Ми вивчаємо цю тему вже багато років і постійно розширюємо її функціонал.

Ви напевно стикалися з невеликими бібліотеками, які з’явилися порівняно недавно. Вони легко і природно вирішують просту проблему, з якою стикаються багато користувачів. Але як тільки ви трохи відійдете в сторону, ви розумієте, що продовжуючи користуватися цим невибагливим, ви змушені постійно огороджувати милиці, якісь модулі для обходу обмежень бібліотеки, адаптери, призначені для того, щоб подружитися з вашою маленькою бібліотекою з іншою маленькою бібліотекою тощо І тепер ваше маленьке шикарне рішення вже не таке шикарне. Більш того, ви відправляєте його на сервер, де він регулярно і послідовно стріляє собі в ногу, адже такий зоопарк милиць і інтеграцій до вас ніхто не випробував. І як би ви не старалися, рано чи пізно все одно зіткнетеся з обмеженнями цієї бібліотеки. І доводиться шукати щось нове. Отже, коли справа доходить до роботи з електронною поштою, ви можете розглянути Aspose.Email для C++!

Ми пропонуємо вам не просто клієнта для роботи з SMTP. По-перше, це далеко не єдиний протокол для надсилання електронних листів з C ++. За допомогою нашого продукту ви можете надсилати електронні листи за допомогою Exchange EWS та Microsoft Graph!

Про можливості MailMessage ми вже розповідали в цій статті. Але це далеко не єдиний інструмент підготовки листів до відправки. Ви можете:

  • генерувати листи з шаблону за допомогою TemplateEngine;
  • розпакувати контейнери з буквами, завдяки підтримці форматів OST, PST, і MBOX;
  • завантажувати листи з поштової скриньки за допомогою підтримки протоколів IMAP, POP3, Exchange EWS і WebDAV, а також Microsoft Graph;
  • конвертувати електронні листи з одного формату в інший.

Ви можете легко отримати лист за допомогою протоколу Exchange Ews. Він буде у форматі MAPI. Але ви можете легко перетворити його в формат EML, що дозволить вам надіслати його пізніше через протокол SMTP. При цьому ви можете в будь-який момент змінити список одержувачів або відправника листа.

Як працює надсилання електронного листа за допомогою C ++ та SMTP?

Конфігурація SMTP

У момент створення екземпляра класу SmtpClient нічого особливого не відбувається. Ви просто вказуєте кількість налаштувань, які дозволять в майбутньому підключатися до SMTP-сервера для відправки повідомлень. Вся магія відбувається при першому зверненні до send метод. Що відбувається в цей момент?

Насправді все залежить від того, які настройки ви вказали. Розглянемо кілька варіантів. Скажімо, ви вказали сервер, але не вказали порт і тип шифрування. В цьому випадку запуститься механізм автоматичного підбору налаштувань. Цей механізм складається з послідовних спроб підключення до SMTP-сервера за допомогою стандартних портів і відповідних алгоритмів шифрування. Спочатку робиться спроба підключення до сервера по зашифрованому каналу. Але якщо він вийде з ладу, механізм спробує встановити незашифроване з’єднання. Якщо ви не хочете використовувати незашифровану версію протоколу, вкажіть SecurityOptions.SSL_AUTO настройка. Цей параметр також дозволяє вибирати параметри сервера, але перевіряє лише зашифровані канали.

Якщо вдалося встановити з’єднання з сервером, то робиться спроба авторизації. Якщо авторизація не вдається, код помилки зберігається на майбутнє. Матчер спробує підключитися іншими способами. Повідомлення буде надіслано, якщо ви зможете підключитися і увійти. Якщо з’єднання не вдається, користувач отримає код помилки авторизації (якщо такий був збережений під час вибору). Так користувач зможе зрозуміти, що ввів неправильний пароль або зробив якусь іншу помилку. Якщо жоден з варіантів портів і типів шифрування не підійшов і ми навіть не дійшли до спроби авторизації, користувач отримає помилку з повідомленням про неправильні налаштування сервера.

До речі, слід зазначити, що наш SMTPClient (як і всі інші клієнти нашої бібліотеки) може підключатися до SMTP-сервера через проксі. Ви також можете вказати параметри проксі-сервера під час ініціалізації.

Авторизація клієнта SMTP

SmtpClient підтримує більше, ніж просто різні методи підключення. Він також підтримує різні методи авторизації. Наприклад, можна скористатися механізмом OAuth. Для цього надаємо відразу кілька інструментів.

Перш за все, це TokenProvider. Це клас, який містить всі необхідні дані для зберігання та оновлення токена OAuth. В цьому випадку необхідно виконати авторизацію OAuth самостійно і зберегти всю необхідну інформацію, отриману з сервера OAuth. RefreshToken відіграє ключову роль тут. Це додатковий маркер, виданий сервером авторизації разом з AccessToken. Їх відмінність полягає в тому, що AccessToken, як правило, діє тільки протягом певного періоду часу. Тоді як RefreshToken діє набагато довше або навіть нескінченно (поки користувач не скасує його). Завдяки RefreshToken клас TokenProvider завжди може оновити AccessToken, якщо останній більше не дійсний.

Інший варіант - інтерфейс ITokenProvider. У цьому випадку ви можете не тільки реалізувати механізм OAuth самостійно, але й передати його SMTPClient, щоб він сам використовував його за потреби.

Слід зазначити, що механізм OAuth не завжди необхідний. Іноді набагато простіше увійти з логіном і паролем. А для цього зовсім не потрібно переналаштовувати обліковий запис електронної пошти, відмовлятися від двофакторної авторизації і т.д. є більш безпечне рішення - це окремий пароль для програми. Щоб скористатися цією функцією, вам слід заглянути в налаштування облікового запису електронної пошти. Швидше за все, пароль для програми буде згенерований автоматично при його налаштуванні в особистому кабінеті. Не забудьте десь зберегти його. Ми також рекомендуємо максимально обмежити дозволи програми під час конфігурації. Звичайно, якщо зловмисник отримає доступ до цього пароля, він не зможе привласнити ваш аккаунт, але все одно може зробити багато неприємних речей. І тут нічого не можна зробити, адже пароль - це єдине, що захищає ваші дані від зловмисників. В цілому інструмент дуже зручний, але знижує безпеку вашого облікового запису, використовуйте його на свій страх і ризик.

Надсилання електронної пошти через SMTP з C ++

Отже, з’єднання з сервером встановлено, і авторизація пройшла успішно. Прийшов час відправляти листи. Для відправки використовується об’єкт класу MailMessage. Технічно можна просто передати всі необхідні дані методу відправки. Але, по суті, вони все одно будуть зібрані в об’єкті MailMessage. Далі, завдяки можливості класу MailMessage серіалізувати в формат EML, ми отримуємо необхідний потік даних, який можна передати на наш SMTP-сервер. Таким чином, даємо серверу команду відправити лист і передавати йому весь вміст листа у вигляді текстових даних. Якщо в листі передаються двійкові дані, наприклад, у вигляді прикріплених файлів, ці дані кодуються в форматі Base64, а метадані листа вказують на те, що одержувачу потрібно буде розшифрувати його назад. SMTP-сервер може перевірити правильність отриманого повідомлення (наприклад, перевірити поле FROM з обліковим записом відправника на сервері), а також доповнювати метадані повідомлення на свій розсуд. Потім сервер надішле електронний лист одержувачам, список яких він також отримає з метаданих електронного листа.