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