Cách tạo email trong C++
Aspose.Email FOSS for C++ lets you compose fully structured Outlook MSG files in code Sử dụng mapi_message::create().Bạn có thể đặt chủ đề, văn bản đơn giản và HTML cơ quan, nhận, người gửi và lưu kết quả đến MSG hoặc EML với một cuộc gọi duy nhất — Không cần cài đặt Outlook.
Bước 1 - Thiết lập dự án
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)Bước 2 – Tạo một thông điệp và thiết lập chủ đề và cơ thể
mapi_message::create() chấp nhận chủ đề và cơ thể văn bản đơn giản như là một nhà xây dựng Các lập luận:
#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");Sau khi tạo, bạn cũng có thể cập nhật chủ đề hoặc cơ thể thông qua set_subject() và set_body():
message.set_subject("Revised: Quarterly Status Update");
message.set_body("Updated body text.");Bước 3 - Thiết lập thuộc tính của người gửi
Sử dụng set_sender_name() và set_sender_email_address() Để xác định người gửi.The Địa chỉ loại là SMTP by default; vượt qua nó với set_sender_address_type() Nếu Cần thiết :
message.set_sender_name("Build Agent");
message.set_sender_email_address("build.agent@example.com");Bước 4 - Thêm người nhận
add_recipient() Gọi một lần cho mỗi người nhận:
message.add_recipient("alice@example.com", "Alice Example");
message.add_recipient("bob@example.com", "Bob Example");Bước 5 – Thiết lập HTML Body
Sử dụng set_html_body() để lưu trữ một phiên bản HTML của cơ thể tin nhắn. cả hai văn bản đơn giản và các cơ quan HTML có thể tồn tại cùng nhau; khách hàng email chọn định dạng phong phú hơn:
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>");Bước 6 - Lưu vào MSG
save() - Xếp hạng thông điệp vào định dạng Outlook MSG. std::filesystem::path Để viết trực tiếp vào đĩa, một std::ostream cho dòng chảy đầu ra, hoặc gọi với không Các lý do để nhận 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();
}Bước 7 - Lưu vào EML
Sử dụng save_to_eml() Đặt tên: ♀️ #5223 ♂️ ☆☆ ✿ Overloads (path, stream, hoặc bytes) có sẵn:
#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"));
}Các vấn đề thường gặp và cách khắc phục
Thư đã được lưu nhưng Outlook hiển thị văn bản bị xé. Đảm bảo thông điệp được tạo ra với Hỗ trợ Unicode String. mapi_message::create() - Chọn Unicode Strings theo mặc định. Nếu bạn cần phải ép buộc mã hóa ANSI (hiếm khi cần thiết), hãy đi qua false Như người thứ ba Lý luận : mapi_message::create(subject, body, false).
save() - Nguồn phát stream trống hoặc bị hỏng. Luôn mở nguồn ra với std::ios::binary.Các dòng văn bản dịch các bản tin trên Windows, làm hỏng tính năng của Cấu trúc CFB nhị phân.
Người nhận không xuất hiện trong trường To/Cc trong Outlook. Đánh giáadd_recipient() Thêm Các nhà cung cấp dịch vụ khác.Thêm display_to MAPI Tài sản Via set_property() Với common_message_property_id::display_to và property_type_code::ptyp_string Outlook sẽ hiển thị tên trong header.
HTML không được hiển thị. Xác nhận chuỗi HTML được hình thành tốt với mở và đóng cửa <html><body> cũng xác minh rằng máy khách nhận hỗ trợ email HTML; một số khách hàng tối thiểu chỉ hiển thị văn bản đơn giản.
set_internet_message_id() Không có tác dụng. Đánh giáset_internet_message_id() Đặt The MAPI Internet message ID được sử dụng cho threading. thuộc tính này là tùy chọn và không cần thiết Đối với một file hợp lệ.
Câu hỏi thường gặp
Cách dễ nhất để tạo file là gì?
#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);
}Tôi có thể tạo một thông điệp chỉ với một HTML body và không có cơ quan văn bản đơn giản?
Đúng vậy, gọi mapi_message::create(subject, "") Để cơ thể văn bản đơn giản trống rỗng, sau đó gọi set_html_body() Để thiết lập nội dung HTML.
Làm thế nào để tôi thiết lập lớp thông điệp?
Sử dụng set_message_class() với các dòng lớp MAPI tin nhắn, ví dụ: "IPM.Note" Đối với một thông điệp email tiêu chuẩn:
message.set_message_class("IPM.Note");Tôi có thể đặt Internet Message-ID để threading không?
Đúng vậy, gọi set_internet_message_id() Với một file format RFC 2822-định dạng thư ID chuỗi:
message.set_internet_message_id("<msg-001@example.com>");Unicode có được kích hoạt theo mặc định không?
Hai dạng lập luận của mapi_message::create(subject, body) Tạo Unicode Để tạo một thông điệp ANSI cổ xưa, hãy false Như là một lập luận thứ ba.