Como criar uma mensagem de e-mail em C++

Como criar uma mensagem de e-mail em C++

Aspose.Email FOSS for C++ lets you compose fully structured Outlook MSG files in code Usando mapi_message::create().Você pode definir o tema, texto plano e corpos HTML, Enviar identidade, destinatários e salvar o resultado para MSG ou EML com uma única chamada — Não é necessário instalar o Outlook.

Passo 1 – Configurar o projeto

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)

Passo 2 – Crie uma mensagem e confira um objeto e corpo

mapi_message::create() aceita o assunto e o corpo de texto plano como construtor Argumentação :

#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");

Após a criação, você também pode atualizar o assunto ou corpo através da set_subject() e set_body():

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

Passo 3 – Configurar propriedades de Envio

Usando set_sender_name() e set_sender_email_address() para identificar o remetente. a O tipo de endereço é SMTP por desvantagem; superando-o com set_sender_address_type() Se o Necessário :

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

Passo 4 – Adicionar recipientes

add_recipient() Apê uma mensagem para o destinatário.Calhe-a uma vez por destinatar:

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

Passo 5 – Configurar um corpo HTML

Usando set_html_body() para armazenar uma versão HTML do corpo de mensagem. ambos textos plain-text e corpos HTML podem coexistir; clientes de email escolhem o formato mais 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>");

Passo 6 - Salve para MSG

save() A mensagem é enviada para o formato MSG do Outlook. passando a std::filesystem::path para escrever diretamente no disco, um std::ostream para a saída de fluxo, ou chamar com o não Argumentos para receber a 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();
}

Passo 7 – Salve para EML

Usando save_to_eml() para produzir um arquivo RFC 5322 / MIME em vez de MSG. O carregamento (path, stream ou bytes) está disponível:

#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 Comuns e Soluções

A mensagem foi salvida, mas o Outlook mostra texto embalado. Assegure-se que a mensagem é criada com Suporte de string Unicode. mapi_message::create() Aplicar as linhas Unicode por padrão. Se você precisar forçar o codificação ANSI (rara vez necessário), passe false Como o terceiro Argumento : mapi_message::create(subject, body, false).

save() A produção de fluxo é vazia ou corrupta. Sempre aberta a saída com std::ios::binary.Texto-mode fluxos traduzir notícias em Windows, corrompendo o Estrutura binária CFB.

Recipientes que não aparecem no campo To/Cc em Outlook. O que éadd_recipient() Adicionados A tabela de receptores do MAPI. adicionalmente, definir o display_to MAPI Propriedade através set_property() com common_message_property_id::display_to e property_type_code::ptyp_string O Outlook exibe nomes no cabeçalho.

HTML não é renderizado. Confirmar que a linha HTML está bem formada com abertura e fechamento <html><body> Verificar também o cliente recebente suporta e-mail HTML; alguns Clientes mínimos apenas fazem texto claro.

set_internet_message_id() Não tem efeito. O que éset_internet_message_id() Estabelece o ID de mensagem da Internet MAPI usado para a trilha. esta propriedade é opcional e não é necessária Para um arquivo MSG válido.

Perguntas Frequentes

Qual é a maneira mais fácil de criar um arquivo 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);
}

Posso criar uma mensagem com apenas um corpo HTML e sem nenhum corpo de texto plano?

Sim, chamando mapi_message::create(subject, "") para deixar o corpo de texto plano vazio, então Chamado set_html_body() Para definir o conteúdo HTML.

Como posso definir a classe de mensagem?

Usando set_message_class() com a linha de classe da mensagem MAPI, por exemplo, "IPM.Note" Para uma mensagem de e-mail padrão:

message.set_message_class("IPM.Note");

Posso definir o ID de mensagem da Internet para ameaçar?

Sim, chamando set_internet_message_id() Com uma linha de ID de mensagem RFC 2822:

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

O Unicode é ativado por padrão?

A forma de dois argumentos é a mapi_message::create(subject, body) Aplicando o Unicode Para criar uma mensagem de herança ANSI, passar false como o terceiro argumento.

Veja também

 Português