目標の設定を始める. C++ のE-Mail FOSS
FOSS for C++ is een bibliotheek voor het lezen en schrijven van Outlook-bestanden, berichten en CFB containers. Het heeft geen afhankelijkheden van derden en vereist alleen een C ++ 17-compiler en CMake .
- Ik ben een echte man.
Stap 1 Clone en toevoegen aan uw CMake-project
git clone https://github.com/aspose-email-foss/Aspose.Email-FOSS-for-Cpp.gitVoeg de bibliotheek toe als een subdirectory en link deze in uw CMakeLists.txt:
add_subdirectory(Aspose.Email-FOSS-for-Cpp)
target_link_libraries(your_target PRIVATE AsposeEmailFoss::AsposeEmailFoss)De bibliotheek gebruikt alleen de C++ standaardbibliotheik en heeft geen afhankelijkheden van derden. GCC 9+, Clang 10+ en MSVC 2019+ worden gerapporteerd als ondersteund in het project README .
Stap 2 Lees een MSG bestand
Voeg de kop mapi_message toe en open een bestand met ゚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() analyseert de CFB-container van het bestand MSG en toont alle eigenschappen van MAPI aan via getypte accessoirmethoden. Geen Microsoft Outlook-installatie is vereist.
Stap 3 Maak een nieuw MSG bestand
Gebruik mapi_message::create() om een bericht in het geheugen te bouwen, verzender- en ontvangervelden vast te stellen en op schijf opslaan met ⌒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() produceert een in-memory bericht. ̋save ((())∂ accepteert het bestandspad, de ∂std::ostream∂ of geen argumenten (teruggeeft a∂ std::vector< PloChaulder3>∂).
Stap 4 EML omzetten in MSG (en terug)
Laad een EML-bestand met mapi_message::load_from_eml(), en serialiseer vervolgens naar MSG met ‘`save (())’). De heen-en terugreis bewaart onderwerp, gewone tekstbody, HTML body eigenschappen, afzender, ontvangers en bijlagen:
#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";
}- Ik ben een echte man.
Gewone problemen en oplossingen
Binary mode niet ingesteld op de stream. Het openen van een bestand met std::ifstream input (("file.msg") ") ■ zonder ⌒std::ios::binary kan leiden tot Windows-lijnenvertaling die de CFB container corrumpeert. Pass ヽ std::ios: binary ■ voor zowel in- als uitgangsstromen.
Linkerfout: AsposeEmailFoss::AsposeEmailFoss niet gevonden. Controleer of ̋add_subdirectory(Aspose.Email-FOSS-for-Cpp) ∂ vóór ̨target_link_libraries ((…) ⌒ in uw ゚CMakeLists.txt∂ staat en dat de naam van het subdirectorie exact overeenkomt met de gekloonde map.
C++17 niet ingeschakeld. De bibliotheek vereist functies van C+17. Als de compiler fouten meldt over gestructureerde bindingen of std::filesystem, voeg dan ̋set(CMAKE_CXX_STANDARD 17)゚ toe aan de bovenkant van uw ∂CMakeLists.txt⌒ voor het oproepwoord ゙add_subdirectory̅.
Een leeg onderwerp of lichaam na het lezen. Sommige MSG bestanden slaan tekst op in Unicode-eigenschappen terwijl andere ANSI code-pagina eigenschapmen gebruiken. message.subject() en ̋messages.body (()⌒ retourneert de string van welke opslag ook aanwezig is; controleer ∂messaging.html_(body)゚ als ゙messagebody () ヽ leeg is.
load_from_eml werpt op misvormde EML. Controleer of het bestand EML gebruik maakt van RFC 5322 lijneindes (CRLF) en geldige MIME headers heeft. De bibliotheek slaat niet stilletjes over misvormige headings heen.
Vaak gestelde vragen
Heeft de bibliotheek Microsoft Outlook of een COM-component nodig?
Nee. Aspose.Email FOSS voor C++ gebruikt zijn eigen CFB- en MAPI -parser en heeft geen afhankelijkheden van derden. Het werkt op Linux, macOS en Windows zonder Outlook geïnstalleerd.
Welke formaten kan ik lezen en schrijven?
MSG (Outlook Message), EML (5322 / { PLACE HOLDR_3) en CFB (Compound File Binary) worden zowel voor lezen als schrijven ondersteund. TNEF (winmail.dat),IMAP, SMTP en POP3 zijn niet ondersteunt.
Hoe kan ik een bericht opslaan in bytes in plaats van een bestand?
Call `() (゚) (()) of ⌒ (∂) to_eml () (-’) zonder argumenten. Beide geven terug ̋std::vectorstd::uint8_t (͡), die je naar elke buffer of stream kunt schrijven.
Welke C++-standaard is vereist?
De bibliotheek gebruikt std::filesystem, ⌒std::optionalヽ en andere C++17 standaard-bibliotheeksfuncties. GCC 9+, Clang 10+ en MSVC 2019+ worden vermeld als ondersteund in het README project.
Is er een release voor pakketbeheerder (vcpkg, Conan)?
Versie 0.1.0 wordt alleen via de bron verspreid. Clone het repository en gebruik add_subdirectory zoals hierboven getoond. Pakketbeheerders kunnen in toekomstige releases worden toegevoegd.
Zie ook:
- FAQ Aspose.Slides FOSS voor C++
- Hoe lees je MSG bestanden in C++
- Hoe EML omzet naar MSG in C++
- Aspose.Email FOSS voor C++ op GitHub