目標の設定を始める. 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::vector< std::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 input (("file.msg") ") без ⌒std::ios::binary` может привести к переводу конца строки Windows, который повреждает контейнер CFB. Пройдите ヽ std::ios: binary゚ для как входных, так и выводных потоков.

Ошибка ссылочного файла: AsposeEmailFoss::AsposeEmailFoss не найдено. Убедитесь, что имя подкаталога соответствует клонированной папке точно.

C++17 не включен. Библиотека требует функций C+17. Если компилятор сообщает об ошибках о структурированных связях или std::filesystem, добавьте ̋set(CMAKE_CXX_STANDARD 17)∂ в верхней части вашего ˮCMakeLists.txt› перед вызовом „addsubdirectory」 .

Пустой предмет или тело после чтения. Некоторые файлы MSG хранят текст в свойствах Unicode, а другие используют свойство ANSI code-page. message.subject() и ̋messages.body (()⌒ возвращают строку из любого хранилища; проверьте ∂messaging.html_(body)ヽ если ゚messagebody () ̅ пусто.

load_from_eml бросает на неформальный EML. Проверьте, что файл EML использует конец строки RFC 5322 (CRLF) и имеет действительные заголовки. Библиотека не пропускает неправильно сформированные надписи.

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

Библиотека требует 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 и POP3 не поддерживаются.

Как я сохраняю сообщение в байтах вместо файла?

Позвонить `() (); или ̋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, как показано выше. Манифесты менеджера пакетов могут быть добавлены в будущих версиях.

См. также:

  • Часто задаваемые вопросы Aspose.Slides FOSS для C++
  • Как читать файлы в C++?
  • Как преобразовать EML в MSG на C++
  • Aspose.Email FOSS для C++ на GitHub
 Русский