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