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.gitDodaj 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 .