目標の設定を始める. C++ のE-Mail FOSS

目標の設定を始める. C++ のE-Mail FOSS

FOSS для C++ - це бібліотека для читання та написання файлів Outlook, повідомлень і контейнерів CFB. Вона не має залежності від третіх сторін і вимагає тільки компілятора C ++ 17 і CMake .

  • Я не знаю.

Крок 1 Клонируйте і додавайте до проекту CMake

git clone https://github.com/aspose-email-foss/Aspose.Email-FOSS-for-Cpp.git

Додати бібліотеку як підкаталог і пов’язати її в CMakeLists.txt:

add_subdirectory(Aspose.Email-FOSS-for-Cpp)
target_link_libraries(your_target PRIVATE AsposeEmailFoss::AsposeEmailFoss)

Бібліотека використовує тільки стандартну бібліотеку C++ і не має залежності від третіх сторін. GCC 9+, Clang 10+ та MSVC 2019+ повідомляються як підтримувані в проекті README .


Крок 2 Читання файлу MSG

Включіть заголовк mapi_message і відкрий файл з ゚mapi_message::from_stream() ̋:

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

int main()
{
    std::ifstream input("sample.msg", std::ios::binary);
    auto message = aspose::email::foss::msg::mapi_message::from_stream(input);

    std::cout << "Subject: " << message.subject() << '\n';
    std::cout << "From: "    << message.sender_email_address() << '\n';
    std::cout << "Body: "    << message.body() << '\n';

    for (const auto& recipient : message.recipients())
        std::cout << "To: " << recipient.email_address << '\n';

    for (const auto& attachment : message.attachments())
        std::cout << "Attachment: " << attachment.filename
                  << " (" << attachment.mime_type << ")\n";
}

mapi_message::from_stream() аналізує контейнер CFB файлу MSG і викриває всі властивості MAPI за допомогою методів вписання. Не потрібно встановлення Microsoft Outlook.


Крок 3 Створення нового файлу MSG

Використовуйте mapi_message::create() для створення повідомлення в пам’яті, встановлення полей відправника та одержувача і збереження на диск з допомогою ⌒save (())`:

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

int main()
{
    auto message = aspose::email::foss::msg::mapi_message::create(
        "Meeting Notes", "Please find the agenda attached.");

    message.set_sender_name("Alice");
    message.set_sender_email_address("alice@example.com");
    message.add_recipient("bob@example.com", "Bob");
    message.add_attachment(
        "agenda.txt",
        std::vector<std::uint8_t>{'I', 't', 'e', 'm', ' ', '1'},
        "text/plain");

    std::ofstream output("meeting_notes.msg", std::ios::binary);
    message.save(output);
}

mapi_message::create() виробляє повідомлення в пам’яті. ̋save ((())∂ приймає шлях файлу, іѕѕstd::ostream∂ або без аргументів (відправляючи a̅std::vectorstd::uint8_t∂).


Крок 4 Перемістити EML в MSG (і назад)

Завантажити файл EML з mapi_message::load_from_eml(), а потім серіалізувати до MSG з ‘`save (()) ‘); похід і повертатися зберігає суб’єкт, простої текстую корпус, властивості HTML-тіла, відправника, одержувача та додатки:

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

int main()
{
    // EML → MSG
    auto message = aspose::email::foss::msg::mapi_message::load_from_eml(
        std::filesystem::path("message.eml"));

    std::cout << "Subject: " << message.subject() << '\n';
    message.save(std::filesystem::path("converted.msg"));

    // MSG → EML round-trip
    auto loaded = aspose::email::foss::msg::mapi_message::from_file(
        std::filesystem::path("converted.msg"));
    loaded.save_to_eml(std::filesystem::path("roundtrip.eml"));

    std::cout << "Saved converted.msg and roundtrip.eml\n";
}
  • Я не знаю.

Спільні проблеми та рішення

Бінарний режим не встановлений на потоці. Відкриття файлу з входом std::ifstream (("file.msg") без ⌒std::ios::binary` може призвести до перекладу завершення лінії Windows, що пошкодить контейнер CFB. Пройдіть ヽ std::ios: binary゚ як для входу, так і для виводу потоків.

Помилка посилання: AsposeEmailFoss::AsposeEmailFoss не знайдено. Перевірте, що ⌒add_subdirectory(Aspose.Email-FOSS-for-Cpp) з'являється перед ̋target_link_libraries ((...) у вашому ∂CMakeLists.txt` і що ім’я підкатастрофи точно відповідає клонованій папці.

C++17 не включено. Бібліотека вимагає функцій C+17. Якщо компілятор повідомляє про помилки щодо структурних зв’язків або std::filesystem, додайте ̋set(CMAKE_CXX_STANDARD 17)∂ в верхній частині вашого ̨CMakeLists.txt∂ перед дзвінком ̇add_subdirectory̅ .

Пусте суб’єкт або тіло після читання. Деякі файли MSG зберігають текст у властивості Юнікоду, а інші використовують властивість ANSI кодових сторінк. message.subject() і ̋messages.body (()⌒ повертають струнку з будь-якого сховища; перевіряйте ∂messaging.html_(body (); якщо ゚messaged. body ().∂ є порожнім.

Перевірте, що файл EML використовує RFC 5322 завершення рядків (CRLF) і має дійсні заголовки MIME. Бібліотека не мовчки пропускає неправильно сформовані заголовки.

Часто задані запитання

Чи потрібен бібліотека Microsoft Outlook або будь-який COM компонент?

Ні. Aspose.Email FOSS для C++ використовує власний CFB і MAPI аналізатор, не має залежності від третіх сторін. Він працює на Linux, macOS та Windows без встановлення Outlook .

Які формати я можу читати і писати?

MSG (Повідомлення Outlook), EML (5322 / { PLACE HOLDR_3) і CFB (Compound File Binary) підтримуються як для читання, так і для написання. TNEF (winmail.dat),IMAP, SMTP та { Place Holder 6 ] не підтримується.

Як зберегти повідомлення в байтах замість файлу?

Покличте () або ̋save_to_eml ((())` без аргументів. Обидва зворотлять ∂std::vectorstd::uint8_t∂, який ви можете написати в будь-який буфер чи потік.

Який стандарт C++ потрібен?

C++17. Бібліотека використовує std::filesystem, ⌒std::optionalヽ і інші функції стандартної бібліотеки в C ++ 17. GCC 9+, Clang 10+ та MSVC 2019 + перераховані як підтримувані у проекті README.

Чи є випуск менеджера пакетів (vcpkg, Conan)?

Версія 0.1.0 розподіляється тільки через джерело. Клонируйте репозиторій і використовуйте add_subdirectory як показано вище. Маніфести менеджера пакетів можуть бути додані в майбутніх випусках.

Дивіться також

  • FAQ Aspose.Slides FOSS для C++
  • Як читати файли в C++
  • Як перетворити EML на MSG в C++
  • Aspose.Email FOSS для C++ на GitHub
 Українська