Hvordan man starter med Aspose.Email FOSS til 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.
Trin 1 – Clone og tilføj til dit CMake-projekt
git clone https://github.com/aspose-email-foss/Aspose.Email-FOSS-for-Cpp.gitTilføj biblioteket som et underdirektorat og link det til din CMakeLists.txt:
add_subdirectory(Aspose.Email-FOSS-for-Cpp)
target_link_libraries(your_target PRIVATE AsposeEmailFoss::AsposeEmailFoss)Biblioteket bruger kun C++-standardbiblioteket og har ingen tredjepartsafhængigheder. GCC 9+, Clang 10+ og MSVC 2019+ rapporteres som understøttet i projektet README.
Trin 2 — Læs en MSG fil
Inkluderer den mapi_message header og åbne en fil med 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() Slette alle pladser i en CFB-beholder og udsætte alle MAPI Egenskaber via indtastede accessor-metoder. Ingen Microsoft Outlook installation er påkrævet.
Trin 3 — Opret en ny MSG fil
Brug af mapi_message::create() at oprette en meddelelse i hukommelsen, indstille afsender og modtager fælder, og gemme til disk med 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() Det er en in-memory besked. save() En fil, der er en vej, en std::ostream, eller ingen argumenter (tilbage til en std::vector<std::uint8_t>).
Trin 4 — Konverter EML til MSG (og tilbage)
Lade en EML fil med mapi_message::load_from_eml(),og derefter serialisere til MSG med save().Runde-trip bevarer emnet, ren tekst krop, HTML krop egenskab, afsender, modtager og vedhæftede filer:
#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";
}Fælles problemer og fixes
Binær mode ikke indstillet på strømmen. Åbn en fil med std::ifstream input("file.msg") Uden std::ios::binary kan forårsage Windows-linjeoversættelse, der ødelægger CFB’en Containervej - Pass std::ios::binary Både for input og output.
Læserfejl: AsposeEmailFoss::AsposeEmailFoss Ikke fundet . Tjek det add_subdirectory(Aspose.Email-FOSS-for-Cpp) Det fremgår før target_link_libraries(...) I din CMakeLists.txt,Og så er det undernavnet Det er præcis det klonede felt.
C++17 er ikke aktiveret. Biblioteket kræver C++17 funktioner. Hvis compilatoren rapporterer fejl om strukturerede bindinger eller std::filesystem,Tilføj set(CMAKE_CXX_STANDARD 17) På den Top af din CMakeLists.txt Før den add_subdirectory Ring til.
Emne eller krop efter læsning. Nogle MSG filer gemmer tekst i Unicode-egenskaber Andre bruger ANSI-kodesideegenskaber. message.subject() og message.body() returnerer strengen fra hvilket lagringssted der end er til stede; tjek message.html_body() Hvis message.body() Det er tomt.
load_from_eml Sæt på en malformet. Kontroller, at filen EML bruger RFC 5322 linjeender (CRLF) og har gyldige MIME overskrifter. Biblioteket hopper ikke stille Fejlformede hovedstæder.
Ofte stillede spørgsmål
Kræver biblioteket Microsoft Outlook eller en COM-komponent?
FOSS til C++ bruger sin egen CFB og MAPI-analysator, og den har ingen tredjepartsafhængigheder. Den fungerer på Linux, macOS og Windows uden Outlook installeret.
Hvilke formater kan jeg læse og skrive?
MSG (Outlook Message), EML (5322 / MIME) og CFB (Compound File Binary) understøttes til både læsning og skrivning. TNEF (winmail.dat),IMAP,SMTP og POP3 underbygges ikke.
Hvordan gemmer jeg en meddelelse i byte i stedet for en fil?
Ring til save() eller save_to_eml() Ingen af dem. - Begge er tilbage std::vector<std::uint8_t>, som du kan skrive til enhver buffer eller strøm.
Hvilken C++ standard er nødvendig?
C++17 - Biblioteket bruger std::filesystem, std::optional,og andre C++17 GCC 9+, Clang 10+ og MSVC 2019+ er angivet som understøttet i Projektet er læst.
Er der en pakkeadministrator udgivelse (vcpkg, Conan)?
Version 0.1.0 distribueres kun via kilden. Klone repository og brug add_subdirectory som vist ovenfor.Paketmanager-manifestationer kan tilføjes i fremtiden De frigiver.