Kā sākt darbu ar Aspose.Email FOSS for C++

Kā sākt darbu ar Aspose.Email FOSS for 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. solis — Klonējiet un pievienojiet savam CMake projektam

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

Pievienojiet bibliotēku kā apakšdirektoriju un saistiet to savā CMakeLists.txt:

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

Bibliotēka izmanto tikai C++ standarta bibliotēku un tai nav trešo pušu atkarību. GCC 9+, Clang 10+ un MSVC 2019+ ir norādīti kā atbalstīti projekta README.


2. solis — Nolasiet MSG failu

Iekļaut mapi_message galveni un atvērt failu ar 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() parsē MSG faila CFB konteineru un atklāj visus MAPI īpašības, izmantojot tipizētās piekļuves metodes. Microsoft Outlook instalācija nav nepieciešama.


3. solis — Izveidot jaunu MSG failu

Izmantojiet mapi_message::create() lai izveidotu ziņojumu atmiņā, iestatītu sūtītāju un saņēmēju laukus, un saglabātu uz diska ar 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() izveido atmiņā esošu ziņojumu. save() pieņem faila ceļu, vienu std::ostream, vai nav argumentu (atgriežot a std::vector<std::uint8_t>).


4. solis — Pārveidot EML uz MSG (un atpakaļ)

Ielādēt EML failu ar mapi_message::load_from_eml(), tad serializēt uz MSG, izmantojot save(). Apgrieztā pārvietošanas laikā tiek saglabāts temats, vienkāršā teksta ķermenis, HTML ķermeņa īpašība, sūtītājs, saņēmēji un pielikumi:

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

Biežāk sastopamās problēmas un to risinājumi

Binārais režīms nav iestatīts plūsmā. Faila atvēršana ar std::ifstream input("file.msg") bez std::ios::binary var izraisīt Windows rindu beigu pārvēršanu, kas bojā CFB konteineru. Pārsūtiet std::ios::binary gan ievades, gan izvades straumēm.

Saistītāja kļūda: AsposeEmailFoss::AsposeEmailFoss nav atrasts. Pārbaudiet, vai add_subdirectory(Aspose.Email-FOSS-for-Cpp) parādās pirms target_link_libraries(...) jūsu CMakeLists.txt, un ka apakšdirektorijas nosaukums precīzi atbilst klonētajam mapes nosaukumam.

C++17 nav aktivizēts. Bibliotēkai ir nepieciešamas C++17 funkcijas. Ja kompilators ziņo par kļūdām par strukturētām saistībām vai std::filesystem, pievienot set(CMAKE_CXX_STANDARD 17) pie jūsu augšdaļā CMakeLists.txt pirms add_subdirectory zvans.

Tukšs temats vai ķermenis pēc nolasīšanas. Daži MSG faili saglabā tekstu Unicode īpašībās kamēr citi izmanto ANSI kodlapas īpašības. message.subject() un message.body() atgriež virkni no jebkuras pieejamās glabāšanas; pārbaudiet message.html_body() ja message.body() ir tukšs.

load_from_eml izsauc kļūdu, ja EML ir bojāts. Pārbaudiet, vai EML fails atbilst RFC 5322 rindas beigas (CRLF) un ir derīgi MIME galvenes. Bibliotēka neklusi izlaiž nepareizi veidotas galvenes.

Biežāk uzdotie jautājumi

Vai bibliotēkai ir nepieciešams Microsoft Outlook vai kāds COM komponents?

Nē. Aspose.Email FOSS for C++ izmanto savu CFB un MAPI parseri un nav atkarīgs no trešo pušu bibliotēkām. Tas darbojas Linux, macOS un Windows sistēmās bez instalēta Outlook.

Kādus formātus es varu lasīt un rakstīt?

MSG (Outlook Message), EML (RFC 5322 / MIME) un CFB (Compound File Binary) tiek atbalstīti gan lasīšanai, gan rakstīšanai. TNEF (winmail.dat), IMAP, SMTP un POP3 netiek atbalstīti.

Kā es varu saglabāt ziņojumu baitos, nevis failā?

Izsauc save() vai save_to_eml() bez argumentiem. Abi atgriež std::vector<std::uint8_t>, ko var rakstīt jebkurā buferī vai straumē.

Kāds C++ standarts ir nepieciešams?

C++17. Bibliotēka izmanto std::filesystem, std::optional, un citus C++17 standarta bibliotēkas funkcijas. GCC 9+, Clang 10+ un MSVC 2019+ ir uzskaitīti kā atbalstīti projektā README.

Vai ir pieejama pakotņu pārvaldnieka versija (vcpkg, Conan)?

Versija 0.1.0 tiek izplatīta tikai kā avots. Klonējiet repozitoriju un izmantojiet add_subdirectory kā parādīts iepriekš. Pakotņu pārvaldnieka manifesti var tikt pievienoti nākotnē izlaidumi.

Skatīt arī

 Latviešu