Cómo comenzar con Aspose.Email FOSS para C++

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.git

Añ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.

Ver también

 Español