Làm thế nào để bắt đầu với Aspose.Email FOSS cho C++
Aspose.Email FOSS for C++ is a library for reading and writing Outlook MSG files, EML messages, and CFB containers. It has no third-party dependencies and requires only a C++17 compiler and CMake.
Bước 1 — Clone và Thêm vào dự án của bạn CMake
git clone https://github.com/aspose-email-foss/Aspose.Email-FOSS-for-Cpp.gitThêm thư viện dưới dạng một thư mục con và liên kết nó vào thư CMakeLists.txt:
add_subdirectory(Aspose.Email-FOSS-for-Cpp)
target_link_libraries(your_target PRIVATE AsposeEmailFoss::AsposeEmailFoss)Thư viện chỉ sử dụng thư viện tiêu chuẩn C++ và không có phụ thuộc của bên thứ ba. GCC 9+, Clang 10+ và MSVC 2019+ được báo cáo như được hỗ trợ trong dự án README.
Bước 2 – Đọc một tập tin MSG
Bao gồm các mapi_message header và mở một tập tin với mapi_message::from_stream():
#include <fstream>
#include <iostream>
#include "aspose/email/foss/msg/mapi_message.hpp"
int main()
{
std::ifstream input("sample.msg", std::ios::binary);
auto message = aspose::email::foss::msg::mapi_message::from_stream(input);
std::cout << "Subject: " << message.subject() << '\n';
std::cout << "From: " << message.sender_email_address() << '\n';
std::cout << "Body: " << message.body() << '\n';
for (const auto& recipient : message.recipients())
std::cout << "To: " << recipient.email_address << '\n';
for (const auto& attachment : message.attachments())
std::cout << "Attachment: " << attachment.filename
<< " (" << attachment.mime_type << ")\n";
}mapi_message::from_stream() Tải về file của bạn và xóa tất cả các file. Các tính năng thông qua các phương pháp phụ kiện được gõ. Không cần cài đặt Microsoft Outlook.
Bước 3 - Tạo một tập tin mới MSG
Sử dụng mapi_message::create() để xây dựng một thông điệp trong bộ nhớ, thiết lập người gửi và người nhận trường, và lưu vào đĩa với save():
#include <fstream>
#include "aspose/email/foss/msg/mapi_message.hpp"
int main()
{
auto message = aspose::email::foss::msg::mapi_message::create(
"Meeting Notes", "Please find the agenda attached.");
message.set_sender_name("Alice");
message.set_sender_email_address("alice@example.com");
message.add_recipient("bob@example.com", "Bob");
message.add_attachment(
"agenda.txt",
std::vector<std::uint8_t>{'I', 't', 'e', 'm', ' ', '1'},
"text/plain");
std::ofstream output("meeting_notes.msg", std::ios::binary);
message.save(output);
}mapi_message::create() Tạo một thông điệp trong bộ nhớ. save() Chấp nhận một file path, một std::ostream, hoặc không có lập luận (trở lại a std::vector<std::uint8_t>).
Bước 4 — Chuyển đổi EML sang MSG (và trở lại)
Tải file EML với mapi_message::load_from_eml(),Sau đó, serialize để MSG với save().- Chuyến đi vòng quanh bảo tồn chủ đề, cơ thể văn bản đơn giản, tài sản cơ quan HTML, Người gửi, người nhận và các phần đính kèm:
#include <filesystem>
#include <iostream>
#include "aspose/email/foss/msg/mapi_message.hpp"
int main()
{
// EML → MSG
auto message = aspose::email::foss::msg::mapi_message::load_from_eml(
std::filesystem::path("message.eml"));
std::cout << "Subject: " << message.subject() << '\n';
message.save(std::filesystem::path("converted.msg"));
// MSG → EML round-trip
auto loaded = aspose::email::foss::msg::mapi_message::from_file(
std::filesystem::path("converted.msg"));
loaded.save_to_eml(std::filesystem::path("roundtrip.eml"));
std::cout << "Saved converted.msg and roundtrip.eml\n";
}Các vấn đề chung và Fixes
Chế độ nhị phân không được đặt trên dòng. Mở một file với std::ifstream input("file.msg") Không std::ios::binary có thể gây ra Windows dịch kết thúc dòng làm hỏng CFB container, đi qua std::ios::binary Cả hai dòng input và output.
Lỗi trái: AsposeEmailFoss::AsposeEmailFoss Không tìm thấy. Kiểm tra điều đó add_subdirectory(Aspose.Email-FOSS-for-Cpp) xuất hiện trước target_link_libraries(...) Trong của bạn CMakeLists.txt, và đó là tên của phụ trách Phù hợp với các thư mục clone chính xác.
C++17 không được kích hoạt. Thư viện yêu cầu các tính năng C++17. Nếu trình biên dịch báo cáo lỗi về các liên kết có cấu trúc hoặc std::filesystem,Thêm vào set(CMAKE_CXX_STANDARD 17) Tại The Top của bạn CMakeLists.txt Trước khi the add_subdirectory gọi điện.
- Vật thể hoặc chủ đề trống sau khi đọc. Một số tập tin MSG lưu trữ văn bản trong các thuộc tính Unicode Trong khi những người khác sử dụng các thuộc tính mã trang ANSI. message.subject() và message.body() trả lại chuỗi từ bất cứ nơi nào lưu trữ hiện diện; kiểm tra message.html_body() Nếu message.body() trống rỗng.
load_from_eml Đánh giá về các loại hình nhựa nhôm. Kiểm tra xem tập tin EML sử dụng RFC 5322 line endings (CRLF) và có tiêu đề MIME hợp lệ. thư viện không lặng lẽ bỏ qua Những cái đầu bị hư.
Thường xuyên hỏi câu hỏi
Thư viện có yêu cầu Microsoft Outlook hoặc bất kỳ thành phần COM nào không?
C++ sử dụng CFB và phân tích của riêng mình, không có phụ thuộc bên thứ ba. Nó hoạt động trên Linux, macOS và Windows mà không cài đặt Outlook.
Tôi có thể đọc và viết ở định dạng nào?
MSG (Outlook Thông điệp), EML (5322 / SMTP) và CFB (Compound File Binary) được hỗ trợ cho cả đọc và viết. TNEF (winmail.dat),IMAP,SMTP} và POP3 không được cung cấp.
Làm thế nào để lưu một tin nhắn thành byte thay vì tệp?
gọi save() hoặc save_to_eml() Không có tranh cãi, cả hai trở về. std::vector<std::uint8_t>, mà bạn có thể viết vào bất kỳ buffer hoặc dòng nào.
Tiêu chuẩn C++ cần thiết là gì?
C++17: Thư viện sử dụng các std::filesystem, std::optional, và các C++17 khác GCC 9+, Clang 10+ và MSVC 2019+ được liệt kê như được hỗ trợ trong Dự án Đọc.
Có một bản phát hành quản lý gói (vcpkg, Conan)?
Phiên bản 0.1.0 chỉ được phân phối thông qua nguồn. Clone kho và sử dụng add_subdirectory như đã hiển thị ở trên. biểu ngữ quản lý gói có thể được thêm vào trong tương lai Giải phóng.