Cara Mengubah C++ ke C#
Aspose.Email FOSS for C++ supports bidirectional conversion between EML (RFC 5322 / Perbedaan antara pengertian dan bentuknya. mapi_message::load_from_eml() Untuk mengimpor file yang sudah ada, maka mapi_message::save() untuk menulisnya sebagai MSG — dan sebaliknya dengan mapi_message::from_file() diikuti oleh mapi_message::save_to_eml().
Langkah 1 – Buat Proyek
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)Langkah 2 — Konversi EML ke MSG (Pelancaran File)
mapi_message::load_from_eml() menganalisa file EML dan mengekspos sifatnya melalui Standar yang mapi_message Interaksi : Panggilan save() Untuk menulis hasilnya sebagai 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";
}Langkah 3 — Konversi EML ke MSG (Stream)
Gunakan Overload Stream untuk load_from_eml() Jika data yang dihasilkan berasal dari jaringan Memori, memori buffer atau lainnya. 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"));
}Langkah 4 – Mengubah MSG menjadi EML
Mengunggah file yang sudah ada dengan mapi_message::from_file(),Setelah itu, serialisasi menjadi Format dengan 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";
}Langkah 5 – Pilihlah tempat yang tepat (Pengunjung)
Contoh berikut menunjukkan bahwa subjek, tubuh, pengirim, penerima, dan lampiran semuanya disimpan melalui perjalanan putaran lengkap:
#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';
}Langkah 6 — Konversi ke EML byte dalam memori
Keduanya save() dan save_to_eml() memiliki overloads argumen nol yang mengembalikan std::vector<std::uint8_t>,yang berguna untuk streaming hasil ke koneksi jaringan atau Data yang tidak dapat diakses oleh file system:
#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();
}Masalah umum dan fixes
load_from_eml() Menggunakan file yang valid. Periksa penggunaan file RFC 5322 file yang diekspor oleh beberapa alat mungkin menggunakan bare LF. Menunggu akhir yang sesuai dengan standar.
Setelah itu, kita akan menggantikan bentuk-bentuk yang ada. Mengkonfirmasi bahwa EML mengandung standar MIME multipart/mixed atau multipart/related Gambar-gambar yang terhubung. gambar-Gambar Inline melalui cid: yang ada di dalamnya dan harus hadir.
HTML yang hilang setelah MSG → EML. Konten HTML dipertahankan selama perjalanan putaran. Ketika message.html_body() tidak ada. jika hanya message.body() Ia dihuni di dalam Sumber MSG, EML hanya akan berisi bagian teks sederhana.
save_to_eml() output stream kosong. Open output stream dengan std::ios::binary.Aliran mode teks merusak struktur MIME di Windows.
Subjek yang berisi ?= Menggunakan Artifact. Ini adalah 2047 kode kata urutan RFC Perpustakaan ini berisi buku-buku yang disimpan dalam perpustakaannya.Dekod dengan sebuah perpUSTaka 2047 RFC Jika Anda membutuhkan Unicode.
Pertanyaan yang Sering Diajukan
Apakah lampiran disimpan di kedua arah konversi?
Kedua, pengawasan dan pemantauan terhadap semua permasalahan yang dihadapi oleh masyarakat melalui mapi_message Binary attachments (Binat biner) adalah bilangan yang diwakili sebagai raw bytes dalam mapi_attachment::data.
Apakah Anda ingin mengatur HTML?
Jika suatu benda mengandung a text/html MIME bagian, itu disimpan dalam MAPI HTML body Properti dan dikembalikan oleh message.html_body() Setelah mengisi daya.
Dapatkah saya mengkonversi file berkas dari direktori EML?
Ya. Iterasi direktori dengan std::filesystem::directory_iterator dan panggilan mapi_message::load_from_eml() Setiap orang .eml Jalan yang lurus, kemudian menyelamatkan 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);
}
}
}Apa yang akan disimpan selama konvergensi?
Subjek, tubuh teks sederhana, HTML body, nama pengirim dan alamat email, daftar penerima, dan semua lampiran MIME. IMAP bendera, judul rute di luar headernya transportasi dasar, serta data yang terenkripsi TNEF tidak disimpan.
adalah load_from_eml() Tipe yang aman?
Setiap panggilan untuk load_from_eml() Membuat sebuah independen mapi_message Pengadilan. anda dapat memanggilnya dari beberapa thread secara bersamaan selama setiap thread menggunakan sendiri pesan yang objek.