วิธีการสร้างข้อความอีเมลใน C++

วิธีการสร้างข้อความอีเมลใน C++

Aspose.Email FOSS for C++ lets you compose fully structured Outlook MSG files in code การใช้ mapi_message::create().คุณสามารถตั้งค่าหัวข้อข้อความธรรมดาและ HTML Body ได้, ตัวตนผู้ส่งผู้รับและบันทึกผลให้ MSG หรือ EML ด้วยการโทรเดียว - ไม่จําเป็นต้องติดตั้ง Outlook.

ขั้นตอนที่ 1 - สร้างโครงการ

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)

ขั้นตอนที่ 2 — สร้างข้อความและตั้งหัวข้อและร่างกาย

mapi_message::create() ยอมรับหัวข้อและเนื้อหาข้อความธรรมดาเป็นผู้สร้าง ข้อตกลง :

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

หลังจากสร้างคุณยังสามารถอัปเดตหัวข้อหรือร่างกายผ่านทาง set_subject() และ set_body():

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

ขั้นตอนที่ 3 - กําหนดคุณสมบัติของผู้ส่ง

ใช้ set_sender_name() และ set_sender_email_address() เพื่อระบุผู้ส่งสัญญาณ ประเภทที่อยู่ SMTP โดย default; แปลงมันด้วย set_sender_address_type() ถ้า ต้องการ :

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

ขั้นตอนที่ 4 - เพิ่มผู้รับ

add_recipient() แปลงผู้รับไปยังข้อความ. โทรต่อครั้งเดียวสําหรับแต่ละผู้ได้รับ:

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

ขั้นตอนที่ 5 - กําหนด HTML Body

ใช้ set_html_body() เพื่อจัดเก็บรุ่น HTML ของตัวอักษรข้อความ ทั้งสองเป็นข้อความธรรมดา และ HTML ร่างกายสามารถอยู่ร่วมกัน; ลูกค้าอีเมลเลือกรูปแบบที่อุดมไปด้วย:

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

ขั้นตอนที่ 6 - บันทึกเพื่อ MSG

save() การจัดลําดับข้อความไปยังรูปแบบ MSG ของ Outlook Pass a message to the format MSg std::filesystem::path เพื่อเขียนโดยตรงไปยังดิสก์, a std::ostream สําหรับการส่งออกสตรีมหรือโทรด้วย No ข้อตกลงที่จะได้รับ 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();
}

ขั้นตอนที่ 7 — บันทึก EML

ใช้ save_to_eml() เพื่อผลิตไฟล์ RFC 5322 / MIME แทน MSG สามตัวเดียวกัน การโหลดเกิน (เส้นทาง, กระแสหรือบิต) มีให้เลือก:

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

ปัญหาทั่วไปและวิธีแก้ไข

ข้อความที่บันทึกไว้ แต่ Outlook แสดงข้อความที่ถูกลบออก. ตรวจสอบให้แน่ใจว่าข้อความจะถูกสร้างขึ้นด้วย การสนับสนุน Unicode String. mapi_message::create() เปิดใช้งาน Unicode Strings โดยค่าเริ่มต้น. หากคุณต้องการบังคับใช้การเข้ารหัส ANSI (ไม่จําเป็น) ผ่านทาง false เป็นที่สาม ข้อตกลง: mapi_message::create(subject, body, false).

save() การส่งออกของสตรีมเป็นว่างเปล่าหรือเสียหาย. เปิดการไหลเวียนของเอาท์พุทเสมอด้วย std::ios::binary.กระแสข้อความโหมดแปลข่าวใน Windows การทําลายการทํางานของระบบ โครงสร้าง CFB แบบไบนารี.

ผู้รับที่ไม่ได้ปรากฏในสนาม To / CC ใน Outlook. สารสกัดadd_recipient() เพิ่มเติม ผู้รับไปยังตารางผู้รับ MAPI นอกจากนี้ยังตั้งค่าการใช้งานของ display_to MAPI ทรัพยากรทาง set_property() ด้วย common_message_property_id::display_to และ property_type_code::ptyp_string ดังนั้น Outlook จะแสดงชื่อในหัวหน้า.

ร่างกาย HTML ไม่ rendered. ตรวจสอบว่ารหัส HTML มีการเปิดและวางรูปแบบได้ดี ปิด <html><body> แท็ก ตรวจสอบยังว่าลูกค้าที่รับรองอีเมล HTML บางส่วน ลูกค้าขั้นต่ําเท่านั้นที่แสดงข้อความเรียบง่าย.

set_internet_message_id() ไม่ได้ผลกระทบ. สารสกัดset_internet_message_id() ตั้งค่า MAPI อินเทอร์เน็ตข้อความ ID ใช้สําหรับการ threading คุณสมบัตินี้เป็นตัวเลือกและไม่จําเป็นต้อง สําหรับไฟล์ MSG ที่ถูกต้อง.

คำถามที่พบบ่อย

วิธีที่ง่ายที่สุดในการสร้างไฟล์ 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);
}

ฉันสามารถสร้างข้อความที่มีเพียง HTML ร่างกายและไม่มีเนื้อหาแบบเรียบง่ายได้หรือไม่?

ใช่ โทรศัพท์ mapi_message::create(subject, "") เพื่อให้ร่างกายของข้อความที่เรียบง่ายว่างแล้ว โทรศัพท์ set_html_body() เพื่อตั้งค่าเนื้อหา HTML.

ฉันจะตั้งค่าคลาสข้อความได้อย่างไร?

ใช้ set_message_class() ด้วยคลาสข้อความ MAPI, ตัวอย่างเช่น "IPM.Note" สําหรับข้อความอีเมลมาตรฐาน:

message.set_message_class("IPM.Note");

ฉันสามารถตั้งค่า ID ข้อความอินเทอร์เน็ตเพื่อ threading ได้หรือไม่?

ใช่ โทรศัพท์ set_internet_message_id() ด้วยรหัสข้อความแบบ RFC 2822:

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

Unicode เปิดใช้งานโดยค่าเริ่มต้นหรือไม่?

ใช่ รูปแบบสองอภิปรายของ mapi_message::create(subject, body) เปิดใช้งาน Unicode strings เพื่อสร้างข้อความ ANSI ที่ได้รับอนุญาตให้ผ่าน false ในฐานะที่เป็นข้ออ้างที่สาม.

นี่

 ภาษาไทย