Cum să creați un mesaj de e-mail în C++
Aspose.Email FOSS for C++ lets you compose fully structured Outlook MSG files in code Utilizarea mapi_message::create().Puteți seta subiectul, corpul text simplu și HTML, identitatea expeditorului, a destinatarilor și salvați rezultatul la MSG sau EML cu un singur apel — Nu este necesară instalarea Outlook.
Pasul 1 – Crearea proiectului
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)Pasul 2 – Creați un mesaj și setați subiectul și corpul
mapi_message::create() acceptă subiectul și corpul textului simplu ca constructor Argumentele :
#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");După creare, puteți actualiza subiectul sau corpul prin intermediul set_subject() şi set_body():
message.set_subject("Revised: Quarterly Status Update");
message.set_body("Updated body text.");Pasul 3 – Setarea proprietăților de trimitere
folosesc set_sender_name() şi set_sender_email_address() Pentru a identifica expeditorul, se Tipul de adresă este SMTP prin default; suprapunerea cu set_sender_address_type() Dacă Necesită :
message.set_sender_name("Build Agent");
message.set_sender_email_address("build.agent@example.com");Pasul 4 - Adăugați destinatari
add_recipient() Se adaugă un destinatar la mesaj. Apelați-l o dată pentru fiecare destinatare:
message.add_recipient("alice@example.com", "Alice Example");
message.add_recipient("bob@example.com", "Bob Example");Pasul 5 – Setarea unui corp HTML
folosesc set_html_body() pentru a stoca o versiune HTML a corpului mesajului. ambele text simplu şi corpurile HTML pot coexista; clienţii de e-mail aleg formatul mai bogat:
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>");Pasul 6 – Salvați la MSG
save() Se va serializa mesajul în format Outlook MSG. std::filesystem::path Pentru a scrie direct pe disc, un std::ostream pentru ieșirea în flux sau apel cu nu Argumente pentru a primi o 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();
}Pasul 7 – Salvați la EML
folosesc save_to_eml() În schimb, se va produce un RFC 5322 / MIME în loc de MSG. supraîncărcări (path, stream sau bytes) sunt disponibile:
#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"));
}Probleme comune și soluții
Mesajul a fost salvat, dar Outlook afișează textul șters. Asiguraţi-vă că mesajul este creat cu Suport pentru Unicode String. mapi_message::create() Se activează prin implicit unicode. Dacă trebuie să forţaţi codificarea ANSI (rareori necesară), treceţi la false Ca al treilea Argumentul : mapi_message::create(subject, body, false).
save() fluxul de ieşire este gol sau corupt. Întotdeauna deschise fluxurile de ieșire cu std::ios::binary.Streamurile de text traduc newsletter-uri pe Windows, corupând Structura binară a CFB.
Destinatarii care nu apar în câmpul To/Cc din Outlook. săadd_recipient() adăugare de la receptorul tabelului. se va stabili şi display_to MAPI Proprietatea prin set_property() cu common_message_property_id::display_to şi property_type_code::ptyp_string Outlook afișează numele în header.
HTML nu este prezentat. Confirmă că șirul HTML este bine format cu deschiderea și închiderea <html><body> Verificaţi, de asemenea, că clientul primitor acceptă e-mailuri HTML; unele Clienții minimi fac doar text simplu.
set_internet_message_id() Nu are efect. săset_internet_message_id() Stabilește-ți MAPI ID de mesaj internet utilizat pentru a trimite mesaje. Această proprietate este opțională și nu este necesară pentru un fişier valabil MSG.
Întrebări frecvente
Care este cel mai simplu mod de a crea un fișier?
#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);
}Pot crea un mesaj cu doar un corp HTML și fără un corpus de text simplu?
Da, apelul mapi_message::create(subject, "") Pentru a lăsa corpul textului simplu gol, apoi Apelul set_html_body() Pentru a crea conținut HTML.
Cum pot seta clasa mesajului?
folosesc set_message_class() cu șirul de clase MAPI pentru mesaje, de exemplu "IPM.Note" Pentru un mesaj de e-mail standard:
message.set_message_class("IPM.Note");Pot seta ID-ul de mesaj Internet pentru a trimite mesaje?
Da, apelul set_internet_message_id() cu un şir de ID-uri pentru mesaj în format RFC 2822:
message.set_internet_message_id("<msg-001@example.com>");Este activat Unicode în mod implicit?
În cazul celor două forme de argumentare a mapi_message::create(subject, body) Activați Unicode Pentru a crea un mesaj ANSI legacy, treceți la false A treia argumentare.