Как да започнете с Aspose.Email FOSS за C++
Aspose.Email FOSS for C++ is a library for reading and writing Outlook MSG files, EML messages, and CFB containers. It has no third-party dependencies and requires only a C++17 compiler and 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, или без аргументи (връщане на 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 Не е намерен. Проверете това. 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 съхраняват текст в свойства на Unicode. Други използват свойства на ANSI кодов страница. message.subject() и в) message.body() да върне нишката от съхраняваната страна; проверка message.html_body() ако: message.body() е празен.
load_from_eml Свършва с деформиран EML. Проверете дали файлът EML използва RFC 5322 библиотеката не пропуска безмълвно деформирани заглавия.
Често задавани въпроси
Библиотеката изисква ли Microsoft Outlook или друг COM компонент?
Не. Aspose.Email FOSS за C++ използва своя собствен CFB и MAPI парсер и няма зависимости от трети страни. Работи на Linux, macOS и Windows без Outlook инсталиран.
Какви формати мога да чета и пиша?
MSG (Outlook Message), EML (RFC 5322 / MIME) и CFB (Compound File Binary) се поддържат както за четене, така и за писане. TNEF (winmail.dat), IMAP, SMTP и POP3 не са подкрепени.
Как да запазя съобщение в байтове вместо във файл?
Обади се. save() или с други: save_to_eml() И двамата се връщат. std::vector<std::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 както е показано по-горе. манифеста на мениджъра на пакетите може да бъде добавен в бъдеще освобождаване.