Comment commencer avec Aspose.Email FOSS pour 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.
Étape 1 – Clonez et ajoutez à votre projet CMake
git clone https://github.com/aspose-email-foss/Aspose.Email-FOSS-for-Cpp.gitAjouter la bibliothèque en tant que sous-répertoire et l’associer à votre CMakeLists.txt:
add_subdirectory(Aspose.Email-FOSS-for-Cpp)
target_link_libraries(your_target PRIVATE AsposeEmailFoss::AsposeEmailFoss)La bibliothèque utilise uniquement la bibliographie standard C++ et n’a pas de dépendances tierces. GCC 9+, Clang 10+ et MSVC 2019+ sont rapportés comme pris en charge dans le projet README.
Étape 2 — Lire un fichier MSG
Inclut le mapi_message Header et ouvrir un fichier avec 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() - détecter le contenu de la fiche CFB et exposer tous les fichiers MAPI Propriétés par le biais de méthodes d’accessoires. Aucune installation Microsoft Outlook n’est requise.
Étape 3 — Créer un nouveau fichier MSG
Utilisez mapi_message::create() pour créer un message dans la mémoire, définir l’expéditeur et le destinataire champs, et enregistrer sur disque avec 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() Il produit un message de mémoire. save() Accepter un chemin de fichier, une std::ostream, ou pas d’arguments (retourner à un std::vector<std::uint8_t>).
Étape 4 — Convertir EML à MSG (et Retour)
Télécharger un fichier avec mapi_message::load_from_eml(),puis sérialiser à MSG avec save().Le tour-trip préserve le sujet, le corps de texte simple, la propriété du corps HTML, Envoyeurs, destinataires et annexes :
#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";
}Problèmes courants et solutions
Le mode binaire n’est pas défini sur le flux. Ouvrir un fichier avec std::ifstream input("file.msg") sans std::ios::binary peut provoquer une traduction de fin de ligne Windows qui corrompt le CFB Conteneur : Passage std::ios::binary Pour les flux d’entrée et de sortie.
Erreur de gauche : AsposeEmailFoss::AsposeEmailFoss pas trouvé . Vérifiez ce add_subdirectory(Aspose.Email-FOSS-for-Cpp) apparaît avant target_link_libraries(...) Dans votre CMakeLists.txt,et que le nom de la sous-directrice Il correspond exactement au dossier cloné.
C++17 n’est pas activé. La bibliothèque nécessite des fonctionnalités C++17. Si le compilateur rapporte des erreurs des liens structurés ou std::filesystem,et ajouter set(CMAKE_CXX_STANDARD 17) A la Top de votre CMakeLists.txt Avant le add_subdirectory appelle à .
Le corps ou le sujet vide après la lecture. Certains fichiers MSG stockent du texte dans les propriétés Unicode D’autres utilisent des propriétés de code-page ANSI. message.subject() et message.body() retourner la chaîne de l’emplacement où le stockage est présent; vérifier message.html_body() Si message.body() est vide.
load_from_eml Il se met à la déformation. Vérifiez que le fichier EML utilise RFC 5322 en-têtes de ligne (CRLF) et a des headsets valides MIME. La bibliothèque ne saute pas silencieusement Des têtes malformées.
Questions fréquentes
La bibliothèque nécessite-t-elle Microsoft Outlook ou tout autre composant COM?
Non. Aspose.Email FOSS pour C++ utilise son propre CFB et son analyseur MAPI et n’a pas de dépendances tiers. Il fonctionne sur Linux, macOS et Windows sans Outlook installé.
Quels formats puis-je lire et écrire ?
MSG (Message Outlook), EML (5322 / MIME) et CFB (Compound File Binary) sont pris en charge pour la lecture et l’écriture. TNEF (winmail.dat),IMAP,SMTP et POP3 ne sont pas prises en compte.
Comment enregistrer un message en bytes au lieu d’un fichier ?
appelle save() ou save_to_eml() Pas de retour, les deux se sont std::vector<std::uint8_t>, que vous pouvez écrire à n’importe quel tampon ou flux.
Quelle est la norme C++ ?
C++17 : La bibliothèque utilise les std::filesystem, std::optional,et autres C++17 fonctionnalités de bibliothèque standard. GCC 9+, Clang 10+ et MSVC 2019+ sont répertoriés comme pris en charge dans Le projet est en lecture.
Y a-t-il une version de Gestionnaire de paquets (vcpkg, Conan) ?
La version 0.1.0 est distribuée uniquement par le biais de la source. Clonez le dépôt et utilisez add_subdirectory comme indiqué ci-dessus. les manifestes de Gestionnaire de paquets pourraient être ajoutés à l’avenir Les libérations.