Как создать электронное письмо в C++

Как создать электронное письмо в C++

Aspose.Email FOSS for C++ lets you compose fully structured Outlook MSG files in code Использование mapi_message::create().Вы можете установить тему, плоский текст и HTML-тесты, отправлять идентификацию, получателей и сохранять результат в MSG или EML с одним призывом — Не требуется установка Outlook.

Шаг 1 — Установите проект

git clone https://github.com/aspose-email-foss/Aspose.Email-FOSS-for-Cpp.git
add_subdirectory(Aspose.Email-FOSS-for-Cpp)
target_link_libraries(your_target PRIVATE AsposeEmailFoss::AsposeEmailFoss)

Шаг 2 — Создайте сообщение и настроите субъект и тело

mapi_message::create() принимает субъект и плоско-текстовый орган как конструктор аргументы →:

#include "aspose/email/foss/msg/mapi_message.hpp"

auto message = aspose::email::foss::msg::mapi_message::create(
    "Quarterly Status Update",
    "Hello team,\n\nPlease find the summary below.\n\nRegards,\nEngineering");

После создания вы также можете обновлять предмет или тело через set_subject() и set_body():

message.set_subject("Revised: Quarterly Status Update");
message.set_body("Updated body text.");

Шаг 3 — Настройка собственности отправителя

Использование set_sender_name() и set_sender_email_address() Идентифицировать отправителя. → Тип адреса является SMTP по дефолту; перекрыть его с set_sender_address_type() Если Нужны были:

message.set_sender_name("Build Agent");
message.set_sender_email_address("build.agent@example.com");

Шаг 4 — Добавить контейнеры

add_recipient() Присоединяет получателя к сообщению.Призовите его один раз по получателю:

message.add_recipient("alice@example.com", "Alice Example");
message.add_recipient("bob@example.com", "Bob Example");

Шаг 5 — Настройка HTML-корпуса

Использование set_html_body() для хранения HTML-версии сообщений тела. оба планы текста и HTML-телы могут сосуществовать; клиенты электронной почты выбирают богатейший формат:

message.set_html_body(
    "<html><body>"
    "<p>Hello team,</p>"
    "<p>Please find the <b>quarterly summary</b> below.</p>"
    "<p>Regards,<br>Engineering</p>"
    "</body></html>");

Шаг 6 — Сберечь до MSG

save() Средиземное сообщение в Outlook MSG. пройдете через std::filesystem::path для записи на диск, а также std::ostream для потокового выхода или звонка с нет аргументы для получения A std::vector<std::uint8_t>:

#include <filesystem>
#include <fstream>
#include "aspose/email/foss/msg/mapi_message.hpp"

int main()
{
    auto message = aspose::email::foss::msg::mapi_message::create(
        "Meeting Notes", "Details inside.");
    message.set_sender_name("Alice");
    message.set_sender_email_address("alice@example.com");
    message.add_recipient("bob@example.com", "Bob");

    // Save to file path
    message.save(std::filesystem::path("meeting_notes.msg"));

    // Save to stream
    std::ofstream out_stream("meeting_notes_stream.msg", std::ios::binary);
    message.save(out_stream);

    // Save to bytes in memory
    auto bytes = message.save();
}

Шаг 7 — Сберечь до EML

Использование save_to_eml() для создания файла RFC 5322 / MIME вместо MSG. перегрузки (путь, поток или байты) доступны:

#include <filesystem>
#include "aspose/email/foss/msg/mapi_message.hpp"

int main()
{
    auto message = aspose::email::foss::msg::mapi_message::create(
        "Hello", "World");
    message.set_sender_name("Alice");
    message.set_sender_email_address("alice@example.com");
    message.add_recipient("bob@example.com", "Bob");

    message.save_to_eml(std::filesystem::path("hello.eml"));
}

Общие проблемы и решения

Сообщение сохранилось, но в Outlook отображается перекрытый текст. Убедитесь, что сообщение создано с Поддержка Unicode String. mapi_message::create() Уникальные ленты по умолчанию. Если вам необходимо навязать ANSI кодирование (редко необходимо), пройдете false Как третье А аргумент : mapi_message::create(subject, body, false).

save() Проток потока пуст или коррумпирован. Всегда открыты выходные потоки с std::ios::binary. текстовый режим потоков переводит новости на Windows, коррумпируя Бинарная структура CFB.

Приемники, не появляющиеся в поле To/Cc в Outlook. Всёadd_recipient() Добавить В таблице MAPI получателей. дополнительно установить display_to MAPI недвижимость через set_property() С common_message_property_id::display_to и property_type_code::ptyp_string Outlook отображает имена в заголовке.

HTML не передан. подтверждает, что HTML-счет хорошо сформирован с открытием и Закрытие <html><body> Также проверяйте, что получающий клиент поддерживает HTML-электронную почту; некоторые Минимальные клиенты делают только четкий текст.

set_internet_message_id() Нет никакого эффекта. Всёset_internet_message_id() Поставьте на Идентификатор MAPI Internet Message ID используется для заказывания. эта свойство является факультативным и не требуется Для того чтобы получить валидный MSG файл.

Часто задаваемые вопросы

Какой самый простой способ создания файла MSG?

#include <fstream>
#include "aspose/email/foss/msg/mapi_message.hpp"

int main()
{
    auto message = aspose::email::foss::msg::mapi_message::create("Hello", "Body");
    message.set_sender_name("Alice");
    message.set_sender_email_address("alice@example.com");
    std::ofstream out("hello.msg", std::ios::binary);
    message.save(out);
}

Могу ли я создать сообщение с только одним телом HTML и без плоского текста?

Да, звонок mapi_message::create(subject, "") чтобы пустить плоско-текстовое тело, а затем звонок set_html_body() Для установки HTML контента.

Как я устанавливаю класс сообщений?

Использование set_message_class() С помощью класса MAPI, например, "IPM.Note" Для стандартного электронного сообщения:

message.set_message_class("IPM.Note");

Могу ли я установить идентификатор сообщений в Интернете для угрозы?

Да, звонок set_internet_message_id() С помощью RFC 2822-формата ID строки:

message.set_internet_message_id("<msg-001@example.com>");

Уникальный код вводится по умолчанию?

Двух аргументов формы mapi_message::create(subject, body) Уникальный код Для создания наследия ANSI сообщение, пройдете false В качестве третьего аргумента.

Смотреть также

 Русский