Hoe maak je een e-mail in C++
Aspose.Email FOSS for C++ lets you compose fully structured Outlook MSG files in code Gebruiken mapi_message::create().U kunt het onderwerp, plain-text en HTML bodes instellen, de identiteit van de verzenden, ontvangers en het resultaat opslaan naar MSG of EML met één oproep — Outlook installatie niet vereist.
Stap 1 - Het project opzetten
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)Stap 2 - Een boodschap maken en Subject en Body Set
mapi_message::create() accepteert het onderwerp en plain-text body als constructeur Argumenten :
#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");Na het maken kunt u ook de onderwerp of lichaam bijwerken via set_subject() en set_body():
message.set_subject("Revised: Quarterly Status Update");
message.set_body("Updated body text.");Stap 3 - Set Sender Properties
Gebruik set_sender_name() en set_sender_email_address() om de zenders te identificeren. de Adres type is SMTP door de vervalsingen; override het met set_sender_address_type() Als het nodig is:
message.set_sender_name("Build Agent");
message.set_sender_email_address("build.agent@example.com");Stap 4 - Aanvullende receptoren toevoegen
add_recipient() een ontvanger aan de boodschap toevoegen. roepen het één keer per ontvangers:
message.add_recipient("alice@example.com", "Alice Example");
message.add_recipient("bob@example.com", "Bob Example");Stap 5 - Een HTML-body instellen
Gebruik set_html_body() om een HTML-versie van het bericht lichaam te bewaren. beide plain-text en HTML-tellen kunnen coexisteren; e-mailclients kiezen het rijker formaat:
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>");Stap 6 - Save to MSG
save() de boodschap in het MSG-formaat van Outlook serialiseren. pass a std::filesystem::path om direct naar de schijf te schrijven, een std::ostream voor stream output, of bellen met no Argumenten om een 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();
}Stap 7 - Save to EML
Gebruik save_to_eml() om een RFC 5322 / MIME bestand te produceren in plaats van MSG. Overloads (route, stroom of byten) zijn beschikbaar:
#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"));
}Veelvoorkomende problemen en oplossingen
Het bericht is opgeslagen, maar Outlook toont gebroken tekst. Zorg ervoor dat de boodschap is gemaakt met Unicode string ondersteuning. mapi_message::create() Unicode-lijnen kunnen standaard worden gebruikt. Als u ANSI-encoding moet verplichten (zeldzaam noodzakelijk), passeren false Als de derde Argumenten : mapi_message::create(subject, body, false).
save() De stroomproductie is leeg of corrupt. Altijd open uitgangstromen met std::ios::binary. tekst-modus stromen vertalen nieuwsbrieven op Windows, corrupt de Binaire CFB structuur.
De ontvangers die niet verschijnen in het To/Cc-veld in Outlook. Deadd_recipient() Addes ontvangers naar de MAPI-receptortabele. bovendien instellen de display_to MAPI Eigendom via set_property() met common_message_property_id::display_to en property_type_code::ptyp_string Outlook geeft namen in de header.
HTML lichaam niet gerenderd. bevestigen dat de HTML-lijn goed is gevormd met opening en sluiten <html><body> ook de ontvangende client ondersteunt HTML-e-mail; sommige Minimaal klanten geven alleen een duidelijke tekst.
set_internet_message_id() heeft geen effect. Deset_internet_message_id() Stel de MAPI internet message ID gebruikt voor het streken. deze eigenschap is optioneel en niet vereist Een geldig MSG bestand.
Veelgestelde vragen
Wat is de eenvoudigste manier om een MSG-bestand te maken?
#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);
}Kan ik een bericht maken met slechts één HTML-body en geen plain-text body?
Ja, het oproepje mapi_message::create(subject, "") om het plain-text lichaam leeg te laten, dan bellen set_html_body() Om de HTML-inhoud te instellen.
Hoe maak ik de boodschapklasse?
Gebruik set_message_class() met de MAPI-berichtklasse, bijvoorbeeld "IPM.Note" Voor een standaard e-mail:
message.set_message_class("IPM.Note");Kan ik de Internet Message-ID instellen voor het streven?
Ja, het oproepje set_internet_message_id() met een RFC 2822-formaat bericht ID string:
message.set_internet_message_id("<msg-001@example.com>");Is Unicode standaard ingeschakeld?
De twee-argumenten vorm van mapi_message::create(subject, body) Unicode mogelijk maken om een legacy ANSI-bericht te maken, pass false als derde argument.