Wie man eine E-Mail in C++ erstellen

Wie man eine E-Mail in C++ erstellen

Aspose.Email FOSS for C++ lets you compose fully structured Outlook MSG files in code benutzen mapi_message::create().Sie können das Thema, den einfachen Text und HTML-Körper einstellen., Sender-Identität, Empfänger und speichern Sie das Ergebnis auf MSG oder EML mit einem einzigen Anruf — Keine Installation von Outlook erforderlich.

Schritt 1 – Set up the Project

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)

Schritt 2 – Erstellen einer Nachricht und Set Subject und Body

mapi_message::create() akzeptiert das Subjekt und den Textkörper als Konstruktor Die Argumente:

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

Nach der Erstellung können Sie auch das Thema oder den Körper über die set_subject() und set_body():

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

Schritt 3 - Setzen Sie Sender-Eigenschaften

benutzen set_sender_name() und set_sender_email_address() Um den Sender zu identifizieren. der Adresse Typ ist SMTP durch Default; überwinden Sie es mit set_sender_address_type() wenn benötigt werden:

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

Schritt 4 - Empfänger hinzufügen

add_recipient() eine Empfängerin an die Nachricht angehängt. rufen Sie sie einmal pro Empfang:

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

Schritt 5 – Einrichten eines HTML-Bodies

benutzen set_html_body() Speichern einer HTML-Version des Messagekörpers. Beide einfachen Text HTML-Körper können koexistieren; E-Mail-Clients wählen das reichere Format:

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

Schritt 6 – Speichern Sie auf MSG

save() Serialisiert die Nachricht in das Format Outlook MSG. Pass auf eine std::filesystem::path um direkt auf die Disk zu schreiben, eine std::ostream für Stream-Ausgabe oder einen Anruf mit Nein Argumente für die Empfangung 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();
}

Schritt 7 – Speichern Sie auf EML

benutzen save_to_eml() um eine RFC 5322 / MIME Datei anstelle von MSG. Überladungen (Path, Stream oder Byte) sind verfügbar:

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

Häufige Probleme und Lösungen

Die Nachricht wurde gespeichert, aber Outlook zeigt abgebrochene Text. Stellen Sie sicher, dass die Nachricht mit Unicode String unterstützt. mapi_message::create() Unicode Strings werden standardmäßig aktiviert. Wenn Sie ANSI-Codierung erzwingen müssen (selten notwendig), gehen Sie durch false Als dritte Das Argument: mapi_message::create(subject, body, false).

save() Die Ausgabe ist leer oder korrupt. Immer offene Ausgangsströme mit std::ios::binary.Text-Modus-Streams übersetzen Newlines auf Windows, die den binäre CFB Struktur.

Empfänger, die nicht im Feld To/Cc in Outlook angezeigt werden. - dieadd_recipient() hinzufügen Empfänger auf die MAPI Empfangs-Tabelle. zusätzlich setzen Sie den display_to MAPI Eigentum via set_property() mit common_message_property_id::display_to und property_type_code::ptyp_string Outlook zeigt die Namen im Header an.

HTML-Code nicht abgebildet werden. Bestätigen Sie, dass die HTML-String gut geformt ist mit Öffnung und Schließung <html><body> auch überprüfen, ob der empfangende client HTML-e-mail unterstützt; einige Minimale Kunden machen nur einfachen Text.

set_internet_message_id() hat keine Wirkung. - dieset_internet_message_id() Setzen Sie die MAPI Internet-Nachricht ID für das Threading. Diese Eigenschaft ist optional und nicht erforderlich für eine gültige MSG Datei.

Häufig gestellte Fragen

Was ist der einfachste Weg, um eine Datei zu erstellen?

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

Kann ich eine Nachricht mit nur einem HTML-Körper und keinem einfachen Textkörper erstellen?

Ja, rufen Sie an mapi_message::create(subject, "") um den Textkörper leer zu lassen, dann Rufen Sie set_html_body() Um den HTML-Inhalt zu definieren.

Wie stelle ich die Message-Klasse ein?

benutzen set_message_class() mit der MAPI Nachrichtenklasse-String, zum Beispiel "IPM.Note" Für eine Standard-E-Mail Nachricht:

message.set_message_class("IPM.Note");

Kann ich die Internet Message-ID für das Threading einstellen?

Ja, rufen Sie an set_internet_message_id() mit einer RFC 2822-Format Nachrichten ID-String:

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

Ist Unicode standardmäßig aktiviert?

Die zweistufige Form des Arguments mapi_message::create(subject, body) Unicode aktivieren Strings. Um eine vererbte ANSI-Nachricht zu erstellen, pass false Das dritte Argument.

Siehe auch

 Deutsch