Cómo comenzar con Aspose.Email FOSS para 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.
Paso 1 - Clone y añade a su proyecto CMake
git clone https://github.com/aspose-email-foss/Aspose.Email-FOSS-for-Cpp.gitAñade la biblioteca como subdirectorio y enlaza en tu sitio. CMakeLists.txt:
add_subdirectory(Aspose.Email-FOSS-for-Cpp)
target_link_libraries(your_target PRIVATE AsposeEmailFoss::AsposeEmailFoss)La biblioteca utiliza sólo la biblioteca estándar C++ y no tiene dependencias de terceros.GCC 9+, Clang 10+, y MSVC 2019+ se reportan como apoyados en el proyecto README.
Paso 2 - Leer un archivo MSG
Incluye el mapi_message en el archivo y abriendo un archivio con 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() parse el contenedor CFB del archivo MSG y exponer todos los MAPI Propiedades a través de métodos de accesorios tipados. No se requiere instalación de Microsoft Outlook.
Paso 3 - Crear un nuevo archivo MSG
Uso mapi_message::create() para crear un mensaje en la memoria, establecer el remitente y el destinatario Los campos, y guardar en el disco con 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() Producir un mensaje en memoria. save() Se trata de un archivo, una std::ostream,No hay argumentos (regresando a std::vector<std::uint8_t>).
Paso 4 - Convertir EML en MSG (y de vuelta)
Cargar un archivo EML con mapi_message::load_from_eml(),Entonces, se puede ver en MSG con save().El círculo-trip conserva el sujeto, el cuerpo de texto plano, la propiedad del cuerpo HTML, enviadores, destinatarios y adhesivos:
#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";
}Problemas y soluciones comunes
El modo binario no está establecido en el flujo. Abre un archivo con std::ifstream input("file.msg") sin std::ios::binary puede causar la traducción de Windows line-end que corrompe el CFB Contenedor de pasaporte std::ios::binary para entradas y salida.
Errores de la izquierda: AsposeEmailFoss::AsposeEmailFoss No encontrado. Verifique que add_subdirectory(Aspose.Email-FOSS-for-Cpp) Aparece antes target_link_libraries(...) En tu CMakeLists.txt,Y el nombre de la subdirectora Se ajusta exactamente a la pasta clonada.
C++17 no está activado. La biblioteca requiere C++17 funciones. si el compiler informa errores de las conexiones estructuradas o std::filesystem,y añade set(CMAKE_CXX_STANDARD 17) En el Top de tu CMakeLists.txt Antes de la add_subdirectory llamado .
El cuerpo o el tema vacío después de la lectura. Algunos archivos MSG almacenan texto en propiedades de Unicode mientras que otros usan propiedades de página de código ANSI. message.subject() y message.body() devolver la cinta desde cualquiera que esté presente; verifique message.html_body() Si se message.body() Es vacío .
load_from_eml Se lanza en EML malformado. Verifique si el archivo EML utiliza RFC 5322 terminales de línea (CRLF) y tiene header MIME válidos. la biblioteca no pasa silenciosamente Los cabezas malformados.
Preguntas frecuentes
¿La biblioteca requiere Microsoft Outlook o cualquier componente COM?
No. Aspose.Email FOSS para C++ utiliza su propio parser CFB y MAPI y no tiene dependencias de terceros.Trabajando en Linux, macOS y Windows sin Outlook instalado.
¿Qué formatos puedo leer y escribir?
MSG (Outlook Message), EML (RFC 5322 / MIME) y CFB (Compound File Binary) son apoyados para la lectura y la escritura. TNEF (winmail.dat), IMAP, SMTP y POP3 no están apoyadas.
¿Cómo puedo guardar un mensaje en bytes en lugar de un archivo?
llamadas save() o save_to_eml() No hay argumento, ambos regresan. std::vector<std::uint8_t>, que puedes escribir a cualquier buffer o corriente.
¿Qué estándar C++ es necesario?
C++17 La biblioteca utiliza el std::filesystem, std::optional,y otros C++17 GCC 9+, Clang 10+ y MSVC 2019+ se listan como apoyados en el El proyecto se prepara.
¿Hay un package manager release (vcpkg, Conan)?
La versión 0.1.0 se distribuye a través de la fuente. Clone el repositorio y utiliza add_subdirectory como se muestra anteriormente. los manifestos de la gestión del paquete pueden ser añadidos en el futuro La liberación.