Kako započeti sa Aspose.Email FOSS za 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.
Korak 1 — Klonirajte i dodajte u vaš CMake projekat
git clone https://github.com/aspose-email-foss/Aspose.Email-FOSS-for-Cpp.gitDodajte biblioteku kao poddirektorijum i povežite je u vašem CMakeLists.txt:
add_subdirectory(Aspose.Email-FOSS-for-Cpp)
target_link_libraries(your_target PRIVATE AsposeEmailFoss::AsposeEmailFoss)Biblioteka koristi samo standardnu C++ biblioteku i nema zavisnosti trećih strana. GCC 9+, Clang 10+ i MSVC 2019+ su navedeni kao podržani u README projektu.
Korak 2 — Čitanje MSG fajla
Uključite mapi_message zaglavlje i otvorite fajl sa 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() parsira CFB kontejner MSG fajla i izlaže sve MAPI svojstva kroz tipizirane metode pristupa. Nije potrebna instalacija Microsoft Outlook-a.
Korak 3 — Kreirajte novi MSG fajl
Koristite mapi_message::create() za izgradnju poruke u memoriji, postavite pošiljaoca i primaoca polja, i sačuvajte na disk pomoću 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() generiše poruku u memoriji. save() prihvata putanju do fajla, an std::ostream, ili bez argumenata (vraćajući a std::vector<std::uint8_t>).
Korak 4 — Konvertujte EML u MSG (i nazad)
Učitajte EML fajl pomoću mapi_message::load_from_eml(), zatim serijalizujte u MSG pomoću save(). Povratni prolaz očuva temu, telo u običnom tekstu, HTML svojstvo tela, pošiljalac, primaoci i prilozi:
#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";
}Uobičajeni problemi i rešenja
Binarni režim nije postavljen na tok. Otvaranje fajla sa std::ifstream input("file.msg") bez std::ios::binary može izazvati Windows prevod linijskih završetaka koji oštećuje CFB Prosledi std::ios::binary za ulazne i izlazne tokove.
Greška linkera: AsposeEmailFoss::AsposeEmailFoss nije pronađeno. Proverite da add_subdirectory(Aspose.Email-FOSS-for-Cpp) se pojavljuje pre target_link_libraries(...) u vašem CMakeLists.txt, i da ime poddirektorijuma se tačno podudara sa kloniranim folderom.
C++17 nije omogućen. Biblioteka zahteva C++17 funkcionalnosti. Ako kompajler prijavi greške o strukturiranim vezama ili std::filesystem, dodaj set(CMAKE_CXX_STANDARD 17) na vrh vašeg CMakeLists.txt pre add_subdirectory poziv.
Prazan predmet ili telo nakon čitanja. Neki MSG fajlovi čuvaju tekst u Unicode svojstvima dok drugi koriste ANSI svojstva kod‑page‑a. message.subject() i message.body() vrati string iz bilo kog skladišta koje je prisutno; proveri message.html_body() ako message.body() je prazno.
load_from_eml baca izuzetak na neispravan EML. Proverite da EML fajl koristi RFC 5322 završetke linija (CRLF) i ima važeća MIME zaglavlja. Biblioteka ne preskače tiho neispravna zaglavlja.
Često postavljana pitanja
Da li biblioteka zahteva Microsoft Outlook ili neki COM komponent?
Ne. Aspose.Email FOSS for C++ koristi sopstveni CFB i MAPI parser i nema zavisnosti trećih strana. Radi na Linuxu, macOS‑u i Windowsu bez instaliranog Outlook‑a.
Koje formate mogu da čitam i pišem?
MSG (Outlook Message), EML (RFC 5322 / MIME) i CFB (Compound File Binary) su podržani i za čitanje i za pisanje. TNEF (winmail.dat), IMAP, SMTP i POP3 nisu podržani.
Kako da sačuvam poruku u bajtove umesto u fajl?
Poziv save() ili save_to_eml() bez argumenata. Obe vraćaju std::vector<std::uint8_t>, što možete zapisati u bilo koji bafer ili tok.
Koji C++ standard je potreban?
C++17. Biblioteka koristi std::filesystem, std::optional, i druge C++17 standardne bibliotečke funkcije. GCC 9+, Clang 10+, i MSVC 2019+ su navedeni kao podržani u README projekta.
Da li postoji izdanje za menadžer paketa (vcpkg, Conan)?
Verzija 0.1.0 se distribuira samo putem izvornog koda. Klonirajte repozitorijum i koristite add_subdirectory kao što je prikazano iznad. Manifesti menadžera paketa mogu biti dodati u budućim izdanjima.