Come creare un messaggio di posta elettronica in C++

Come creare un messaggio di posta elettronica in C++

Aspose.Email FOSS for C++ lets you compose fully structured Outlook MSG files in code utilizzo mapi_message::create().Puoi impostare il soggetto, il testo semplice e i corpi HTML, identificazione del mittente, dei destinatari e salvare il risultato a MSG o EML con una singola chiamata — Non è richiesta alcuna installazione di Outlook.

Passo 1 - Impostare il progetto

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 – Creare un messaggio e impostare oggetto e corpo

mapi_message::create() accetta il soggetto e il corpo di testo semplice come costruttore Gli argomenti:

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

Dopo la creazione, puoi anche aggiornare il soggetto o il corpo tramite set_subject() e set_body():

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

Passo 3 - Impostare le proprietà del mittente

usare set_sender_name() e set_sender_email_address() per identificare il trasmettitore. il Tipo di indirizzo è SMTP per default; sopravvalutalo con set_sender_address_type() Se si Necessario di:

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

Passo 4 - Aggiungi i destinatari

add_recipient() Inserisci un destinatario per il messaggio. Chiamalo una volta per ricevente:

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

Passo 5 – Impostare un corpo HTML

utilizzo set_html_body() per memorizzare una versione HTML del corpo del messaggio. entrambi testo semplice e corpi HTML possono coesistere; i clienti di posta elettronica scelgono il formato più ricco:

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 – Salva a MSG

save() Il messaggio viene serializzato in formato Outlook MSG. Passare un std::filesystem::path per scrivere direttamente sul disco, un std::ostream per la produzione di flusso, o chiamare con no Argomenti per ricevere 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 - Salva a EML

utilizzo save_to_eml() per produrre un file RFC 5322 / MIME invece di MSG. I overloads (path, stream o byte) sono disponibili:

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

Problemi comuni e risoluzioni

Messaggio salvato, ma Outlook mostra testo spazzolato. Assicurarsi che il messaggio sia creato con Supporto per stringa Unicode. mapi_message::create() Per impostazione predefinita è possibile utilizzare le strisce Unicode. Se è necessario forzare l’encoding ANSI (raramente necessario), passare false Come il terzo Argomento di: mapi_message::create(subject, body, false).

save() Il flusso di uscita è vuoto o corrotto. Sempre aperto flussi di uscita con std::ios::binary.I flussi di modalità testo tradurranno le newsletter su Windows, corrompendo il sistema operativo. Struttura binaria CFB.

Ricever che non appaiono nel campo To/Cc in Outlook. diadd_recipient() Aggiungiamo di un destinatario alla tabella del destinatore. aggiungendo il display_to MAPI Proprietà via set_property() con common_message_property_id::display_to e property_type_code::ptyp_string Outlook mostra i nomi nell’intestazione.

Il corpo HTML non è rilasciato. Confirmi che la stringa HTML sia ben formata con apertura e chiusura <html><body> verificare anche che il client ricevente supporta l’email HTML; alcuni I clienti minimi rendono solo testo semplice.

set_internet_message_id() Non ha effetto. diset_internet_message_id() Imposta il MAPI ID del messaggio Internet usato per il threading. Questa proprietà è opzionale e non richiesto per un file valido.

Domande frequenti

Qual è il modo più semplice per creare un file?

#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 creare un messaggio con solo un corpo HTML e nessun corpo di testo semplice?

Sì, chiamate mapi_message::create(subject, "") Per lasciare il corpo del testo semplice vuoto, quindi Chiamateci set_html_body() Per definire il contenuto HTML.

Come impostare la classe del messaggio?

utilizzo set_message_class() con la stringa di classe del messaggio MAPI, ad esempio "IPM.Note" Per un messaggio di posta elettronica standard:

message.set_message_class("IPM.Note");

Posso impostare l’ID di messaggio Internet per il threading?

Sì, chiamate set_internet_message_id() con una stringa ID del messaggio in formato RFC 2822:

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

Unicode è abilitato per impostazione predefinita?

La forma di due argomenti mapi_message::create(subject, body) Permette di usare Unicode Per creare un messaggio ANSI legacy, passare false Il terzo argomento.

Anche questo

 Italiano