Cum să începeți cu Aspose.Email FOSS pentru C++

Cum să începeți cu Aspose.Email FOSS pentru 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.

Pasul 1 – Clonează și adaugă la proiectul tău CMake

git clone https://github.com/aspose-email-foss/Aspose.Email-FOSS-for-Cpp.git

Adăugați biblioteca ca subdirector și conectați-o la CMakeLists.txt:

add_subdirectory(Aspose.Email-FOSS-for-Cpp)
target_link_libraries(your_target PRIVATE AsposeEmailFoss::AsposeEmailFoss)

Biblioteca utilizează numai biblioteca standard C++ și nu are dependențe terță parte. GCC 9+, Clang 10+ și MSVC 2019+ sunt raportate ca fiind acceptate în proiectul README.


Pasul 2 – Citiți un fișier MSG

Includeţi în mapi_message Header şi deschideţi un fişier cu 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() Se va face o analiză a containerului CFB al fișierului MSG și se vor expune toate MAPI. Proprietățile prin metode de accesoriu tipate. Nu este necesară instalarea Microsoft Outlook.


Pasul 3 — Creați un nou fișier MSG

folosesc mapi_message::create() pentru a crea un mesaj în memorie, setarea expeditorului și receptorului câmpuri, şi salvaţi pe disc cu 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() Se produce un mesaj in-memory. save() acceptă un traseu de fișier, o std::ostream, sau fără argumente (returnarea a std::vector<std::uint8_t>).


Pasul 4 — Convertiți EML în MSG (și înapoi)

Încărcaţi un fişier cu mapi_message::load_from_eml(),apoi serializarea la MSG cu save().Turul păstrează subiectul, corpul textului simplu, proprietatea corpului HTML, expeditori, destinatari şi ataşamente:

#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";
}

Probleme comune și soluții

Modul binar nu este setat pe flux. Deschiderea unui fișier cu std::ifstream input("file.msg") fără std::ios::binary poate provoca o traducere la sfârșitul liniei Windows care corupe CFB-ul container. pas cu pas std::ios::binary atât pentru fluxurile de intrare, cât și pentru cele de ieșire.

Greșeala de stânga: AsposeEmailFoss::AsposeEmailFoss Nu a fost găsit. Verificaţi acest add_subdirectory(Aspose.Email-FOSS-for-Cpp) Apare înainte de target_link_libraries(...) În dumneavoastră CMakeLists.txt,În acest caz, numele subordonat Se potrivește cu clonarea exactă a fișierului.

C++17 nu este activat. Biblioteca necesită caracteristici C++17. Dacă compilatorul raportează erori legăturile structurate sau std::filesystem,Adăugați set(CMAKE_CXX_STANDARD 17) La cea Topul tău CMakeLists.txt Înainte de a add_subdirectory Apelul ăsta.

Subiectul sau corpul gol după citire. Unele fișiere MSG stochează text în proprietățile Unicode Alții folosesc proprietăți ANSI de codare a paginii. message.subject() şi message.body() întoarceți șirul din care este prezentă stocarea; verificați message.html_body() Dacă message.body() este goală.

load_from_eml Se întoarce pe o formă de defect. Verificaţi dacă fişierul EML utilizează RFC 5322 se termină cu liniile (CRLF) şi are titluri valabile MIME. Biblioteca nu trece în tăcere Capetele de formă.

Întrebări frecvente

Biblioteca necesită Microsoft Outlook sau orice componentă COM?

FOSS pentru C++ utilizează propriul său analizor CFB și MAPI și nu are dependențe terță parte. funcționează pe Linux, macOS și Windows fără Outlook instalat.

Ce formate pot citi și scrie?

MSG (Mesaj Outlook), EML (5322 / PLACEHOLDER_3}) și CFB (Compound File Binary) sunt acceptate atât pentru citire, cât și pentru scriere. TNEF (winmail.dat),IMAP,SMTP și POP3 nu sunt suportate.

Cum pot salva un mesaj în byte în loc de fișier?

Apelul save() sau save_to_eml() Fără niciun motiv, ambele se întorc. std::vector<std::uint8_t>, pe care le puteți scrie la orice buffer sau flux.

Ce standard C++ este necesar?

C++17 – Biblioteca utilizează std::filesystem, std::optional,C++17 și altele GCC 9+, Clang 10+ și MSVC 2019+ sunt listate ca fiind acceptate în Proiectul a fost citit.

Există un manager de pachete (vcpkg, Conan)?

Versiunea 0.1.0 este distribuită numai prin sursă. Clonează repozitorul şi foloseşte add_subdirectory Manifestele managerului de pachete pot fi adăugate în viitor. eliberări .

Aşa că

 Română