Giới thiệu

Làm việc với các tệp Outlook MSG trong C++ trong lịch sử đã yêu cầu tự động hoá COM chỉ dành cho Windows
hoặc các thư viện bên thứ ba nặng nề với giấy phép hạn chế. Aspose.Email FOSS cho C++
thay đổi điều đó: nó là một thư viện C++17 thuần túy không có phụ thuộc bên ngoài, không có COM, và không
có mã phụ thuộc vào nền tảng. Nó được biên dịch giống hệt trên Linux, macOS và Windows.

Thư viện được phát hành dưới giấy phép MIT và được phân phối dưới dạng mã nguồn qua GitHub. Bạn tích hợp nó bằng cách sao chép kho và thêm nó như một thư mục con của CMake — không cần đăng ký trình quản lý gói, và không cần xây dựng trước các tệp nhị phân.

Bài viết này hướng dẫn quy trình cốt lõi: đọc một tệp MSG hiện có, kiểm tra các thuộc tính của nó, tạo một tin nhắn mới bằng chương trình, và chuyển đổi qua lại giữa các định dạng MSG và EML.


Tính năng chính

Đọc các tệp MSG hiện có

Sử dụng msg_reader để mở tệp .msgmsg_document để truy cập nội dung có cấu trúc của nó. Cả hai lớp đều nằm trong không gian tên aspose::email::foss::msg.

#include "aspose/email/foss/msg/msg_reader.hpp"
#include "aspose/email/foss/msg/msg_document.hpp"
#include <filesystem>

namespace aef = aspose::email::foss;

auto reader   = aef::msg::msg_reader::from_file(std::filesystem::path("message.msg"));
auto document = aef::msg::msg_document::from_reader(reader);

msg_reader cũng có một overload from_stream để đọc từ một std::istream, điều này hữu ích trong các ngữ cảnh phía máy chủ hoặc pipeline nơi các tệp không có trên đĩa.

Tạo Tin Nhắn Bằng Lập Trình

mapi_message::create tạo ra một tin nhắn mới trong bộ nhớ với tiêu đề và nội dung. Bạn có thể sau đó đặt chi tiết người gửi, thêm người nhận và đính kèm tải trọng nhị phân hoặc văn bản trước khi lưu.

#include "aspose/email/foss/msg/mapi_message.hpp"

namespace aef = aspose::email::foss;

auto msg = aef::msg::mapi_message::create(
    "Quarterly status update",
    "Hello team,\n\nPlease find the rollout summary attached.\n\nRegards");

msg.set_sender_name("Build Agent");
msg.set_sender_email_address("build.agent@example.com");
msg.add_recipient("alice@example.com", "Alice Example");
msg.save(std::filesystem::path("output.msg"));

Chuyển đổi MSG sang EML

mapi_message hỗ trợ chuyển đổi trực tiếp từ MSG sang EML thông qua phương pháp save_to_eml.
Đầu ra EML tuân thủ RFC 5322 (MIME), giúp nó tương thích với bất kỳ máy khách thư điện tử tiêu chuẩn hoặc quy trình xử lý nào.

auto loaded = aef::msg::mapi_message::from_file(
    std::filesystem::path("message.msg"), /*strict=*/false);

// Save as EML to a file
loaded.save_to_eml(std::filesystem::path("message.eml"));

// Or capture as bytes
std::vector<std::uint8_t> eml_bytes = loaded.save_to_eml();

Tải từ EML

Hướng ngược lại cũng tương đối đơn giản: load_from_eml đọc một tệp EML và tạo ra một mapi_message trong bộ nhớ, sau đó có thể lưu lại thành MSG.

auto from_eml = aef::msg::mapi_message::load_from_eml(
    std::filesystem::path("message.eml"));

from_eml.save(std::filesystem::path("restored.msg"));

Truy cập CFB cấp thấp

Đối với các trường hợp sử dụng nâng cao — chẳng hạn như đọc các thuộc tính MAPI thô không được API cấp cao công bố — cfb_reader cung cấp quyền truy cập trực tiếp vào container Compound File Binary hỗ trợ định dạng MSG.

#include "aspose/email/foss/cfb/cfb_reader.hpp"

namespace aef = aspose::email::foss;

auto cfb = aef::cfb::cfb_reader::from_file(std::filesystem::path("message.msg"));
auto storage_ids = cfb.storage_ids();
auto stream_ids  = cfb.stream_ids();

Bắt đầu nhanh

Bước 1 — Sao chép và Thêm dưới dạng Thư mục con

git clone https://github.com/aspose-email-foss/Aspose.Email-FOSS-for-Cpp.git

Trong dự án của bạn CMakeLists.txt:

cmake_minimum_required(VERSION 3.26)
project(my_project)

add_subdirectory(Aspose.Email-FOSS-for-Cpp)

add_executable(my_app main.cpp)
target_link_libraries(my_app PRIVATE AsposeEmailFoss::AsposeEmailFoss)

Bước 2 — Bao gồm và Sử dụng

#include <iostream>
#include "aspose/email/foss/msg/mapi_message.hpp"

namespace aef = aspose::email::foss;

int main()
{
    // Create a message
    auto msg = aef::msg::mapi_message::create("Hello from C++", "Body text here");
    msg.save(std::filesystem::path("hello.msg"));

    // Round-trip to EML
    auto loaded = aef::msg::mapi_message::from_file(
        std::filesystem::path("hello.msg"), false);
    loaded.save_to_eml(std::filesystem::path("hello.eml"));

    std::cout << "Done\n";
}

Bước 3 — Xây dựng

cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build

Định dạng được hỗ trợ

Định dạngPhần mở rộngĐọcGhi
MSG (Outlook Message).msg
EML (RFC 5322 / MIME).eml
CFB (Compound File Binary).msg, .cfb

Mã nguồn mở & Cấp phép

Aspose.Email FOSS for C++ được phát hành dưới giấy phép MIT. Mã nguồn đầy đủ có sẵn trên GitHub tại aspose-email-foss/Aspose.Email-FOSS-for-Cpp. Việc sử dụng thương mại được phép mà không có phí bản quyền. Thư viện không có phụ thuộc thời gian chạy nào ngoài một trình biên dịch C++17 và CMake 3.26 trở lên.


Bắt đầu