Jak zacząć z Aspose.Email FOSS dla C++

Jak zacząć z Aspose.Email FOSS dla 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.

Krok 1 – Klonuj i dodaj do projektu CMake

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

Dodaj bibliotekę jako poddirektorium i powiązaj ją z Twoim CMakeLists.txt:

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

Biblioteka korzysta tylko z standardowej biblioteki C++ i nie ma zależności od osób trzecich. GCC 9+, Clang 10+, oraz MSVC 2019+ są zgłaszane jako wspierane w projekcie README.


Krok 2 – Przeczytaj plik MSG

Włącz do nich mapi_message otwórz i otwieraj plik z 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() rozciąga zbiorniki CFB pliku MSG i eksponuje wszystkie MAPI Właściwości za pomocą typowanych metod dodatku. nie jest wymagane instalacja programu Microsoft Outlook.


Krok 3 – Tworzenie nowego pliku MSG

Używanie mapi_message::create() Aby utworzyć wiadomość w pamięci, ustawić nadawcę i odbiorcowi przechowywać i zapisać na dysku z 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() Wprowadza wiadomość w pamięci. save() Umożliwia przejęcie ścieżki, a std::ostream,i nie ma żadnych argumentów (wracając do std::vector<std::uint8_t>).


Krok 4 – Konwertowanie EML na MSG (i z powrotem)

Pobierz plik EML z mapi_message::load_from_eml(),Następnie zarejestruj się w MSG save().Okres trasy zachowuje temat, płaski tekst ciała, HTML własność ciała;, Odbiorcy, odbiorca i załączniki:

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

Wspólne problemy i rozwiązania

Tryb binarny nie jest ustawiony na strumieniu. Otwieranie pliku z std::ifstream input("file.msg") bez std::ios::binary może spowodować tłumaczenie linii końcowej systemu Windows, które zepsuje CFB Kontainer - paszport std::ios::binary zarówno do wejścia, jak i wyjścia.

błąd lewicowy: AsposeEmailFoss::AsposeEmailFoss Nie znaleziono. Sprawdź to add_subdirectory(Aspose.Email-FOSS-for-Cpp) pojawia się wcześniej target_link_libraries(...) W Twoim CMakeLists.txt,I to nazwa poddyrektora. Dokładnie odpowiada klonowanej folderze.

C++17 nie jest włączony. Biblioteka wymaga funkcji C++17. jeśli kompilator zgłasza błędy związków strukturalnych lub std::filesystem,Dodaj → set(CMAKE_CXX_STANDARD 17) W tym Na szczycie Twojego CMakeLists.txt Przed tym, że add_subdirectory i wezwanie .

Puste przedmioty lub ciała po przeczytaniu. Niektóre pliki MSG przechowują tekst w unicode właściwościach Inne używają właściwości kodów ANSI. message.subject() i message.body() zwrot paska z dowolnego miejsca przechowywania; sprawdź message.html_body() Jeśli message.body() Jest puste.

load_from_eml Wyrzuca się na złośliwy EML. Sprawdź, czy plik EML używa RFC 5322 linie końców (CRLF) i posiada ważne nagłówki MIME. biblioteka nie przechodzi cicho Złamanie głowic.

Często zadawane pytania

Czy biblioteka wymaga programu Microsoft Outlook lub jakiegokolwiek elementu COM?

No. Aspose.Email FOSS dla C++ wykorzystuje własny parser CFB i MAPI i nie ma zależności od osób trzecich. działa na Linux, macOS i Windows bez zainstalowanego programu Outlook.

Jakie formaty mogę czytać i pisać?

MSG (Outlook Message), EML (RFC 5322 / MIME) i CFB (Compound File Binary) są obsługiwane zarówno do czytania, jak i pisania. TNEF (winmail.dat), IMAP, SMTP i POP3 nie są wspierane.

Jak przechowywać wiadomość na bajty zamiast pliku?

Wzywaj save() lub save_to_eml() Nie ma żadnych argumentów. obaj powrócą std::vector<std::uint8_t>, które można napisać do dowolnego bufera lub strumienia.

Jakie standardy C++ są wymagane?

C++17 - Biblioteka wykorzystuje std::filesystem, std::optional,i innych C++17 Standardowe funkcje biblioteczne.GCC 9+, Clang 10+ i MSVC 2019+ są wymienione jako obsługiwane w Projekt jest gotowy.

Czy istnieje wypłata menedżera pakietu (vcpkg, Conan)?

Wersja 0.1.0 jest dystrybuowana tylko za pośrednictwem źródła. add_subdirectory Jak pokazano powyżej. manifesti zarządzania pakietem mogą być dodane w przyszłości Wypuszczanie .

Zobacz również

 Polski