Wie man mit Aspose.Email FOSS für C++ beginnt
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.
Schritt 1 – Klone und füge zu deinem CMake-Projekt hinzu
git clone https://github.com/aspose-email-foss/Aspose.Email-FOSS-for-Cpp.gitFügen Sie die Bibliothek als Unterverzeichnis hinzu und verlinken Sie sie in Ihrem CMakeLists.txt:
add_subdirectory(Aspose.Email-FOSS-for-Cpp)
target_link_libraries(your_target PRIVATE AsposeEmailFoss::AsposeEmailFoss)Die Bibliothek verwendet nur die C++-Standardbibliotheks und hat keine Abhängigkeiten von Drittanbietern. GCC 9+, Clang 10+ und MSVC 2019+ werden gemeldet, als unterstützt im Projekt README.
Schritt 2 — Lesen Sie eine MSG Datei
Inklusive der mapi_message header und öffnen Sie eine Datei mit 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() Die CFB-Container der MSG Datei analysiert und alle MAPI enthüllt. Eigenschaften über eingegebenen Zubehörmethoden. Keine Microsoft Outlook-Installation erforderlich.
Schritt 3 — Erstellen einer neuen MSG Datei
benutzen mapi_message::create() um eine Nachricht im Gedächtnis zu erstellen, Sender und Empfänger festlegen Felder, und speichern Sie auf Disk mit 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() Erzeugt eine In-Memory Nachricht. save() Akzeptiert einen Dateiweg, eine std::ostream, oder keine Argumente (zurück zu einer std::vector<std::uint8_t>).
Schritt 4 — Konvertieren Sie EML in MSG (und zurück)
Laden Sie eine EML Datei mit mapi_message::load_from_eml(), dann serialisieren Sie mit MSG auf save().Der Rundreise bewahrt das Thema, den einfachen Textkörper, die HTML-Körperschaft, Sender, Empfänger und Anhänge:
#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";
}Häufige Probleme und Lösungen
Binärmodus nicht auf dem Stream eingestellt. Öffnen einer Datei mit std::ifstream input("file.msg") Ohne std::ios::binary kann zu einer Windows-Linienendübersetzung führen, die den CFB beschädigt Container - Pass std::ios::binary Für sowohl Input als auch Output Streams.
Links falsch gemacht: AsposeEmailFoss::AsposeEmailFoss nicht gefunden werden. Überprüfen Sie das add_subdirectory(Aspose.Email-FOSS-for-Cpp) Vorher erscheint target_link_libraries(...) In deinem CMakeLists.txt,Und das unter dem Namen der Unterdirektorin. Das klonierte Dossier passt genau.
C++17 nicht aktiviert. Die Bibliothek erfordert C++17-Funktionen. Wenn der Compiler Fehler melden kann Strukturierte Verbindungen oder std::filesystem,und Add set(CMAKE_CXX_STANDARD 17) Bei der Top von deinem CMakeLists.txt Vor dem add_subdirectory Rufen Sie an.
Leere Sache oder Körper nach dem Lesen. Einige MSG-Dateien speichern Text in Unicode-Eigenschaften andere verwenden ANSI-Code-Seiten-Eigenschaften. message.subject() und message.body() zurückgeben, von dem Speicher aus der String vorhanden ist; Überprüfen Sie die message.html_body() wenn message.body() ist leer .
load_from_eml Die Schleife auf den falschen Platz. Überprüfen Sie, ob die Datei EML verwendet RFC 5322 Zeileenden (CRLF) und hat gültige MIME Überschriften. Die Bibliothek überspringt nicht leise Fehlbildete Kopfzeilen.
Häufig gestellte Fragen
Benötigt die Bibliothek Microsoft Outlook oder eine COM-Komponente?
FOSS für C++ verwendet seinen eigenen CFB und MAPI-Passager und hat keine Abhängigkeiten von Drittanbietern. Es funktioniert auf Linux, macOS und Windows ohne Outlook installiert.
Welche Formate kann ich lesen und schreiben?
MSG (Outlook-Nachricht), EML (5322 / PLACehOLDer_3}) und CFB (Compound File Binary) werden sowohl für das Lesen als auch für die Schreibweise unterstützt. TNEF (winmail.dat),IMAP,SMTP und POP3 werden nicht unterstützend.
Wie speichere ich eine Nachricht in Byte anstelle einer Datei?
Rufen Sie save() oder save_to_eml() Keine Argumente, beide kommen zurück std::vector<std::uint8_t>, die Sie in jeden Puffer oder Stream schreiben können.
Welche C++-Standard ist erforderlich?
C++17 Die Bibliothek verwendet die std::filesystem, std::optional,und andere C++17 GCC 9+, Clang 10+ und MSVC 2019+ sind als unterstützt aufgeführt. Das Projekt läuft.
Gibt es eine Package Manager-Version (vcpkg, Conan)?
Version 0.1.0 wird nur über die Quelle verteilt. Klone das Repository und verwende add_subdirectory wie oben gezeigt.Paketmanager-Manifestationen können in Zukunft hinzugefügt werden Freigeben zu lassen.