Comment créer un message en C++

Comment créer un message en C++

Aspose.Email FOSS for C++ lets you compose fully structured Outlook MSG files in code Utiliser mapi_message::create().Vous pouvez définir le sujet, le texte plain et les corps HTML, envoyer l’identité, les destinataires et sauvegarder le résultat à MSG ou EML avec une seule appel — Pas besoin d’installation Outlook.

Étape 1 - Démarrer le projet

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)

Étape 2 – Créer un message et définir le sujet et le corps

mapi_message::create() accepte le sujet et le corps de texte plain en tant que constructeur Les arguments :

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

Après la création, vous pouvez également mettre à jour le sujet ou le corps via set_subject() et set_body():

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

Étape 3 – Définir les propriétés de l’envoi

Utiliser set_sender_name() et set_sender_email_address() pour identifier le messager. la Le type d’adresse est SMTP par défaut ; surrêtez-le avec set_sender_address_type() Si le Il faut :

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

Étape 4 – Ajouter des récipients

add_recipient() appelle un destinataire au message. Appelez-le une fois par destinatar :

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

Étape 5 - Créer un corps HTML

Utiliser set_html_body() pour stocker une version HTML du corps de message. les deux textes plains et les corps HTML peuvent coexister ; les clients de courriel choisissent le format plus riche :

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

Étape 6 - Enregistrer à MSG

save() la série du message dans le format MSG d’Outlook. passez un std::filesystem::path pour écrire directement sur le disque, un std::ostream pour le flux de sortie, ou appeler avec non Les arguments à recevoir 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();
}

Étape 7 - Enregistrer à EML

Utiliser save_to_eml() pour produire un fichier RFC 5322 / MIME au lieu de MSG. Les surcharges (path, stream ou bytes) sont 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"));
}

Problèmes courants et solutions

Le message est enregistré mais Outlook affiche un texte déchiré. Assurez-vous que le message est créé avec Unicode support de la ligne. mapi_message::create() Unicode permet des filets par défaut. Si vous devez forcer le codage ANSI (rares à nécessiter), passez false Comme le troisième Argumentation : mapi_message::create(subject, body, false).

save() Le flux est vide ou corrompu. Toujours ouvert les flux de sortie avec std::ios::binary.Les courants de mode texte traduisent des nouvelles sur Windows, corrompant le Le système binaire CFB.

Les récepteurs ne sont pas affichés dans le champ To/Cc dans Outlook. - Leadd_recipient() Addé les destinataires dans la table des destinatars MAPI. En outre, définissez le display_to MAPI Propriété par set_property() avec common_message_property_id::display_to et property_type_code::ptyp_string Outlook affiche donc des noms dans le titre.

Le corps HTML n’est pas rendu. Confirmez que la barre HTML est bien formée avec l’ouverture et le Fermeture <html><body> Vérifier également que le client recevant soutient l’e-mail HTML; certains Les clients ne font que le texte clair.

set_internet_message_id() Il n’a pas d’effet. - Leset_internet_message_id() Il met en place le MAPI Internet Message ID utilisé pour la trace. Cette propriété est facultative et n’est pas requise Pour un fichier MSG valide.

Questions fréquentes

Quelle est la façon la plus simple de créer un fichier 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);
}

Puis-je créer un message avec seulement un corps HTML et pas de texte plain ?

Oui, appeler mapi_message::create(subject, "") pour laisser le corps de texte plain vide, puis Appel à set_html_body() Pour définir le contenu HTML.

Comment définir la classe de message ?

Utiliser set_message_class() avec la ligne de classe MAPI, par exemple "IPM.Note" Pour un message standard :

message.set_message_class("IPM.Note");

Puis-je définir l’ID Message Internet pour la menace ?

Oui, appeler set_internet_message_id() avec un fichier ID de message RFC 2822 :

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

Unicode est-il activé par défaut ?

La forme de deux arguments est mapi_message::create(subject, body) Unicode permet de Pour créer un message d’héritage ANSI, passez false comme le troisième argument.

Voir aussi

 Français