Cómo crear un mensaje de correo electrónico en C++

Cómo crear un mensaje de correo electrónico en C++

Aspose.Email FOSS for C++ lets you compose fully structured Outlook MSG files in code Utilizando mapi_message::create().Puedes definir el tema, texto plano y cuerpos HTML, enviar la identidad, los destinatarios y salvar el resultado a MSG o EML con una única llamada — No se requiere instalación de Outlook.

Paso 1 - Configurar el proyecto

git clone https://github.com/aspose-email-foss/Aspose.Email-FOSS-for-Cpp.git
add_subdirectory(Aspose.Email-FOSS-for-Cpp)
target_link_libraries(your_target PRIVATE AsposeEmailFoss::AsposeEmailFoss)

Paso 2 - Crea un mensaje y configura el sujeto y el cuerpo

mapi_message::create() acepta el sujeto y el cuerpo de texto plano como constructor Argumentos de:

#include "aspose/email/foss/msg/mapi_message.hpp"

auto message = aspose::email::foss::msg::mapi_message::create(
    "Quarterly Status Update",
    "Hello team,\n\nPlease find the summary below.\n\nRegards,\nEngineering");

Después de la creación, también puede actualizar el tema o cuerpo a través del set_subject() y set_body():

message.set_subject("Revised: Quarterly Status Update");
message.set_body("Updated body text.");

Paso 3 - Configurar las propiedades de los enviadores

Uso set_sender_name() y set_sender_email_address() para identificar el mensaje.El El tipo de dirección es SMTP por defecto; sobreviviendo con set_sender_address_type() Si se Necesidad de:

message.set_sender_name("Build Agent");
message.set_sender_email_address("build.agent@example.com");

Paso 4 - Adicionar recipientes

add_recipient() apéndice un destinatario a la mensaje.Calca una vez por destinador:

message.add_recipient("alice@example.com", "Alice Example");
message.add_recipient("bob@example.com", "Bob Example");

Paso 5 - Crea un cuerpo HTML

Uso set_html_body() para almacenar una versión HTML del cuerpo de mensaje. ambos textos plain-text y los cuerpos HTML pueden coexistir; clientes de correo electrónico elegir el formato más rico:

message.set_html_body(
    "<html><body>"
    "<p>Hello team,</p>"
    "<p>Please find the <b>quarterly summary</b> below.</p>"
    "<p>Regards,<br>Engineering</p>"
    "</body></html>");

Paso 6 - Salva a MSG

save() Se puede ver el mensaje en formato MSG de Outlook. std::filesystem::path para escribir directamente al disco, un std::ostream para la salida de flujo, o llamar con no Argumentos para recibir una std::vector<std::uint8_t>:

#include <filesystem>
#include <fstream>
#include "aspose/email/foss/msg/mapi_message.hpp"

int main()
{
    auto message = aspose::email::foss::msg::mapi_message::create(
        "Meeting Notes", "Details inside.");
    message.set_sender_name("Alice");
    message.set_sender_email_address("alice@example.com");
    message.add_recipient("bob@example.com", "Bob");

    // Save to file path
    message.save(std::filesystem::path("meeting_notes.msg"));

    // Save to stream
    std::ofstream out_stream("meeting_notes_stream.msg", std::ios::binary);
    message.save(out_stream);

    // Save to bytes in memory
    auto bytes = message.save();
}

Paso 7 - Salva a EML

Uso save_to_eml() para producir un archivo RFC 5322 / MIME en lugar de MSG. las sobrecargas (casa, corriente o bytes) están disponibles:

#include <filesystem>
#include "aspose/email/foss/msg/mapi_message.hpp"

int main()
{
    auto message = aspose::email::foss::msg::mapi_message::create(
        "Hello", "World");
    message.set_sender_name("Alice");
    message.set_sender_email_address("alice@example.com");
    message.add_recipient("bob@example.com", "Bob");

    message.save_to_eml(std::filesystem::path("hello.eml"));
}

Problemas y soluciones comunes

El mensaje se salvó pero Outlook muestra texto endurecido. Asegúrese de que el mensaje se crea con Unicode de apoyo. mapi_message::create() Se permite unicode de líneas por defecto. Si necesita obligar a la codificación ANSI (rara vez necesario), pasa false Como el tercero Argumento de: mapi_message::create(subject, body, false).

save() La producción de la corriente es vacía o corrupta. Siempre abierto el flujo de salida con std::ios::binary. los flujos de texto en modo traducen noticias en Windows, corrompendo el El sistema binario CFB.

Recipientes que no aparecen en el campo To/Cc en Outlook. Eladd_recipient() Adidas los destinatarios a la tabla de recipientes MAPI. Adicionalmente, se establece el display_to MAPI Propiedad por medio de set_property() con common_message_property_id::display_to y property_type_code::ptyp_string Outlook muestra nombres en el título.

El cuerpo HTML no se ha renderizado. Confirmar que la cadena HTML está bien formada con apertura y Cierra <html><body> También verifica el cliente que recibe soporta correo electrónico HTML; algunos Los clientes mínimos solo hacen texto claro.

set_internet_message_id() No tiene efecto. Elset_internet_message_id() Establece el MAPI Internet Message ID utilizado para la inclinación. Esta propiedad es opcional y no es requerida Para un archivo MSG válido.

Preguntas frecuentes

¿Cuál es la forma más sencilla de crear un archivo MSG?

#include <fstream>
#include "aspose/email/foss/msg/mapi_message.hpp"

int main()
{
    auto message = aspose::email::foss::msg::mapi_message::create("Hello", "Body");
    message.set_sender_name("Alice");
    message.set_sender_email_address("alice@example.com");
    std::ofstream out("hello.msg", std::ios::binary);
    message.save(out);
}

¿Puedo crear un mensaje con sólo un cuerpo HTML y sin un organismo de texto plano?

Sí, llamado mapi_message::create(subject, "") para dejar el cuerpo de texto plano vacío, entonces llamadas set_html_body() para configurar el contenido HTML.

¿Cómo puedo definir la clase de mensajes?

Uso set_message_class() con la línea de clase de mensajes MAPI, por ejemplo, "IPM.Note" Para un mensaje de correo electrónico estándar:

message.set_message_class("IPM.Note");

¿Puedo establecer el ID de mensaje de Internet para la amenaza?

Sí, llamado set_internet_message_id() Con una red de mensaje RFC 2822:

message.set_internet_message_id("<msg-001@example.com>");

¿Es Unicode activado por defecto?

La forma de dos argumentos de mapi_message::create(subject, body) Conoce unicode Para crear un mensaje de herencia ANSI, pasa false como el tercer argumento.

Ver también

 Español