目標の設定を始める. 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