Làm thế nào để chuyển đổi EML sang MSG trong C++
Aspose.Email FOSS for C++ supports bidirectional conversion between EML (RFC 5322 / (Thuyết định) và các phương pháp sử dụng. mapi_message::load_from_eml() Để nhập khẩu một File file, sau đó là mapi_message::save() viết nó như MSG - và ngược lại với mapi_message::from_file() Theo sau bởi mapi_message::save_to_eml().
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 — Chuyển đổi EML sang MSG (Date Path)
mapi_message::load_from_eml() Phân tích tệp EML và phơi bày các thuộc tính của nó thông qua Tiêu chuẩn mapi_message Interface - Gọi điện thoại save() Để viết kết quả như MSG:
#include <filesystem>
#include <iostream>
#include "aspose/email/foss/msg/mapi_message.hpp"
int main()
{
const auto message = aspose::email::foss::msg::mapi_message::load_from_eml(
std::filesystem::path("message.eml"));
std::cout << "Subject: " << message.subject() << '\n';
std::cout << "From: " << message.sender_email_address() << '\n';
message.save(std::filesystem::path("converted.msg"));
std::cout << "Saved converted.msg\n";
}Bước 3 — Chuyển đổi EML sang MSG (Stream)
Sử dụng dòng chảy quá tải của load_from_eml() khi dữ liệu EML đến từ một mạng socket, bộ nhớ buffer hoặc một số std::istream:
#include <fstream>
#include <filesystem>
#include "aspose/email/foss/msg/mapi_message.hpp"
int main()
{
std::ifstream eml_stream("message.eml", std::ios::binary);
const auto message = aspose::email::foss::msg::mapi_message::load_from_eml(eml_stream);
message.save(std::filesystem::path("converted.msg"));
}Bước 4 - Chuyển đổi MSG sang EML
Tải lên một tập tin MSG hiện có với mapi_message::from_file(),Sau đó, hãy xem lại các vị trí của Format với save_to_eml():
#include <filesystem>
#include <iostream>
#include "aspose/email/foss/msg/mapi_message.hpp"
int main()
{
const auto message = aspose::email::foss::msg::mapi_message::from_file(
std::filesystem::path("sample.msg"));
message.save_to_eml(std::filesystem::path("exported.eml"));
std::cout << "Saved exported.eml\n";
}Bước 5: Đi bộ vòng tròn (EML → MSG→ EML)
Ví dụ sau đây cho thấy rằng chủ đề, cơ thể, người gửi, nhận và đính kèm đều được bảo tồn thông qua một chuyến đi vòng tròn hoàn chỉnh:
#include <filesystem>
#include <iostream>
#include "aspose/email/foss/msg/mapi_message.hpp"
int main()
{
const auto msg_path = std::filesystem::path("roundtrip.msg");
const auto eml_out = std::filesystem::path("roundtrip.eml");
// EML → MSG
auto message = aspose::email::foss::msg::mapi_message::load_from_eml(
std::filesystem::path("original.eml"));
message.save(msg_path);
// MSG → EML
auto reloaded = aspose::email::foss::msg::mapi_message::from_file(msg_path);
reloaded.save_to_eml(eml_out);
std::cout << "Subject preserved: " << reloaded.subject() << '\n';
std::cout << "Attachments: " << reloaded.attachments().size() << '\n';
}Bước 6 — Chuyển đổi sang EML byte trong bộ nhớ
Cả hai save() và save_to_eml() có các đối số không quá tải mà trả về std::vector<std::uint8_t>, hữu ích cho kết quả phát trực tuyến đến một kết nối mạng hoặc Dữ liệu mà không cần chạm vào hệ thống tập tin:
#include <filesystem>
#include "aspose/email/foss/msg/mapi_message.hpp"
int main()
{
const auto message = aspose::email::foss::msg::mapi_message::load_from_eml(
std::filesystem::path("message.eml"));
// In-memory MSG bytes
const auto msg_bytes = message.save();
// In-memory EML bytes
const auto eml_bytes = message.save_to_eml();
}Các vấn đề thường gặp và cách khắc phục
load_from_eml() Đặt file trên một file có dạng EML. Kiểm tra sử dụng tập tin RFC 5322 Các tập tin EML được xuất bởi một số công cụ có thể sử dụng LF trần. thư viện Đang chờ kết thúc theo tiêu chuẩn.
Các tập tin liên kết bị thiếu sau EML → MSG chuyển đổi. Xác nhận EML chứa tiêu chuẩn MIME multipart/mixed hoặc multipart/related inline images referenced. hình ảnh trong qua cid: được mang theo như các phần đính kèm trong MSG và nên có mặt.
HTML bị mất sau khi MSG → EML. Nội dung HTML được bảo tồn thông qua vòng chuyến đi Khi nào message.html_body() Không có trống rỗng, nếu chỉ message.body() Nó được dân cư trong nguồn MSG, EML sẽ chỉ chứa một phần văn bản đơn giản.
save_to_eml() Stream output trống rỗng. Open output streams với std::ios::binary.Các dòng văn bản chế độ làm hỏng cấu trúc MIME trên Windows.
Chủ đề chứa ?= Mã hóa các Artifact. Những điều này RFC 2047 mã hóa-nguyên từ chuỗi Thư viện bảo quản chúng như là. decode với thư viện RFC 2047 Nếu bạn cần một chủ đề Unicode đơn giản.
Câu hỏi thường gặp
Các tệp đính kèm có được bảo tồn ở cả hai hướng chuyển đổi không?
Cả hai loại đệm đều được chuyển đổi theo cách này. mapi_message list attachment. Binary attachments are represented as raw bytes in the file. - Các đính kèm nhị phân được thể hiện như các byte thô trong mapi_attachment::data.
Có phải EML → MSG bảo quản cơ thể HTML không?
Nếu EML chứa một text/html MIME phần, nó được lưu trữ trong cơ thể MAPI HTML Tài sản và trả lại bởi message.html_body() Sau khi tải.
Tôi có thể chuyển đổi một tập tin EML?
Có. Iterate directory với std::filesystem::directory_iterator và call mapi_message::load_from_eml() Mỗi người .eml Đường đi, sau đó cứu với save():
#include <filesystem>
#include "aspose/email/foss/msg/mapi_message.hpp"
int main()
{
for (const auto& entry : std::filesystem::directory_iterator("emails/"))
{
if (entry.path().extension() == ".eml")
{
auto msg = aspose::email::foss::msg::mapi_message::load_from_eml(entry.path());
auto out = entry.path();
out.replace_extension(".msg");
msg.save(out);
}
}
}Điều gì được bảo quản trong quá trình EML ↔ MSG chuyển đổi?
Chủ đề, cơ thể văn bản đơn giản, HTML, tên người gửi và địa chỉ email, danh sách người nhận và tất cả các tệp đính kèm MIME. IMAP cờ, tiêu đề định tuyến ngoài tiêu chuẩn giao thông cơ bản, và dữ liệu được mã hóa TNEF không được bảo tồn.
là load_from_eml() Thread an toàn?
Mỗi cuộc gọi đến load_from_eml() Tạo một độc lập mapi_message Đề tài: Bạn có thể gọi nó từ nhiều chủ đề cùng một lúc miễn là mỗi chủng sử dụng riêng của mình. Thông điệp đối tượng.