Hur man börjar med Aspose.Email FOSS för 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.
Steg 1 – Klona och lägga till ditt CMake-projekt
git clone https://github.com/aspose-email-foss/Aspose.Email-FOSS-for-Cpp.gitLägg till biblioteket som en underadress och länk det i din egen CMakeLists.txt:
add_subdirectory(Aspose.Email-FOSS-for-Cpp)
target_link_libraries(your_target PRIVATE AsposeEmailFoss::AsposeEmailFoss)Biblioteket använder endast C++-standardbiblioteket och har inga tredjepartsberoende. GCC 9+, Clang 10+ och MSVC 2019+ rapporteras som stöds i projektet README.
Steg 2 – Läs en MSG-fil
Inkludera den mapi_message header och öppna en fil med 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() Parsera MSG-filen CFB-behållare och exponerar alla MAPI:er egenskaper genom typade tilläggsmetoder. Ingen Microsoft Outlook installation krävs.
Steg 3 – Skapa en ny MSG-fil
Användning mapi_message::create() att bygga ett meddelande i minnet, ange avsändare och mottagare fält, och spara till disk med 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() Det ger ett in-minnes meddelande. save() accepterar en filvägen, ett std::ostream,eller inga argument (återgå till en std::vector<std::uint8_t>).
Steg 4 – Konvertera EML till MSG (och tillbaka)
Ladda upp en EML-fil med mapi_message::load_from_eml(),och sedan serialisera till MSG med save().Runda resan bevarar ämnet, platt textkropp, HTML-kroppen egenskaper, avsändare, mottagare och tillägg:
#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";
}Vanliga problem och fixar
Binärläge inte inställd på strömmen. Öppna en fil med std::ifstream input("file.msg") utan std::ios::binary kan orsaka Windows-linjeändaröversättning som korrupterar CFB Hållare Pass std::ios::binary För både input och output strömmar.
Linkor fel: AsposeEmailFoss::AsposeEmailFoss inte hittat. Kontrollera att det add_subdirectory(Aspose.Email-FOSS-for-Cpp) förekommer innan target_link_libraries(...) I din CMakeLists.txt,och det underordnade namnet på matchar klonade mappar exakt.
C++17 är inte aktiverad. Biblioteket kräver C++17-funktioner. om kompileraren rapporterar fel om strukturerade band eller std::filesystem,och add set(CMAKE_CXX_STANDARD 17) I den Topp av din CMakeLists.txt Innan den add_subdirectory och ringa.
tomt ämne eller kropp efter läsning. Vissa MSG-filer lagrar text i Unicode-egenskaper medan andra använder ANSI kod-sidor. message.subject() och message.body() returnerar strängen från vilken lagring som helst är närvarande; kontrollera message.html_body() Om message.body() är tomt.
load_from_eml Hämta på skadad EML. Kontrollera att EML-filen använder RFC 5322 linjeändar (CRLF) och har giltiga MIME-högtalare. biblioteket hoppar inte tyst Förfalskade huvudrutor.
Ofta ställda frågor
Behöver biblioteket Microsoft Outlook eller någon COM-komponent?
Aspose.Email FOSS för C++ använder sin egen CFB och MAPI parser och har inga tredjepartsberoende. Det fungerar på Linux, macOS och Windows utan Outlook installerat.
Vilka format kan jag läsa och skriva?
MSG (Outlook Message), EML (RFC 5322 / MIME) och CFB (Compound File Binary) stöds för både läsning och skrivande. TNEF (winmail.dat), IMAP, SMTP och POP3 stödas inte.
Hur sparar jag ett meddelande till byter istället för en fil?
Ringa till save() eller save_to_eml() Ingen argument. båda återvänder std::vector<std::uint8_t>, som du kan skriva till någon buffer eller ström.
Vilken C++ standard krävs?
C++17: Biblioteket använder std::filesystem, std::optional,och andra C++17 GCC 9+, Clang 10+ och MSVC 2019+ listas som stöds i Projektet är readme.
Finns det en paketmanager release (vcpkg, Conan)?
Version 0.1.0 distribueras endast via källkod. klona lagret och använd add_subdirectory som anges ovan. pakethanteraren manifester kan läggas till i framtiden släpps ut.