Aspose.Email FOSS for C++ ile Nasıl Başlarım?
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.
Adım 1 - Klonlayın ve CMake Projesi’ne Ekleyin
git clone https://github.com/aspose-email-foss/Aspose.Email-FOSS-for-Cpp.gitKütüphanesini bir alt dizin olarak ekleyin ve kendi CMakeLists.txt:
add_subdirectory(Aspose.Email-FOSS-for-Cpp)
target_link_libraries(your_target PRIVATE AsposeEmailFoss::AsposeEmailFoss)Kütüphanede sadece C++ standart kütüphane kullanılır ve üçüncü taraf bağımlılıkları yoktur. GCC 9+, Clang 10+ ve MSVC 2019+ Proje README tarafından desteklenir.
Adım 2 - MSG dosyasını okuyun
dahil olmak üzere mapi_message header ve bir dosya açın 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() MSG dosyasının CFB konteynerini analiz eder ve tüm MAPI’leri ortaya çıkarır. Microsoft Outlook yükleme gerektirmez.
3. Adım - Yeni bir MSG dosyası oluşturun
kullanmak mapi_message::create() Bir mesajı hafızaya oluşturmak, gönderen ve alıcı ayarlamak alanları, ve disk için kaydetmek 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() Bir hafızada mesaj gönderir. save() Bir dosya yolunu kabul eder, bir std::ostream, veya hiçbir argüman (dönüş a) std::vector<std::uint8_t>).
Adım 4 — EML MSG dönüştürmek (ve Geri)
EML dosyası ile ilgili bir yazı yazın mapi_message::load_from_eml(),sonra MSG’ye serialize etme save().Sunucu, basit metin vücudu, HTML vücut özelliği korur., Gönderilen, Alınan ve Ekleyenler:
#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";
}Yaygın Sorunlar ve Çözümler
Binary mode stream’da ayarlanmıyor. Bir dosya açmak için std::ifstream input("file.msg") olmadan std::ios::binary Windows çizgi sonu çevirisi, CFB’yi bozar hale gelebilir. Konteyner - Geçit std::ios::binary Hem giriş hem de çıkış akışı için.
Yanlışlıkla sol taraf: AsposeEmailFoss::AsposeEmailFoss Bulamadım ki. Bunu kontrol edin add_subdirectory(Aspose.Email-FOSS-for-Cpp) Önceden görünen target_link_libraries(...) Senin için CMakeLists.txt,Bu arada, altyapı adı Klonlu dosyayı tam olarak çözebilir.
C++17 etkinleştirilmiyor. Kütüphanenin C++17 özelliklerine ihtiyacı vardır. kompileci hataları raporlarsa Yapısal bağlar veya std::filesystem,ekleyin set(CMAKE_CXX_STANDARD 17) O’na Üstün senin CMakeLists.txt Önceki İçerikThe add_subdirectory Çağrı yapın.
Okumadan sonra boş bir konu veya vücut. Bazı MSG dosyaları Unicode özelliklerinde metin depolamaktadır. Diğerleri ise ANSI kod sayfası özelliklerini kullanır. message.subject() ve message.body() Kimin ne zaman geleceğini kontrol et, message.html_body() Eğer message.body() boş bir şey.
load_from_eml EML’de kötü formda kalır. EML dosyasının RFC 5322 kullanıyor olduğundan emin olun CRLF (line endings) ve geçerli MIME başlıkları vardır. Kütüphanesi sessizce atlamaz Başlıklar kötüye gidiyor.
Sık Sorulan Sorular
Kütüphanenin Microsoft Outlook veya herhangi bir COM bileşeni gerektirir mi?
Aspose.Email FOSS for C++ kendi CFB ve MAPI analizi kullanır ve üçüncü taraf bağımlılıkları yoktur. Outlook yüklemeden Linux, macOS ve Windows üzerinde çalışır.
Hangi formatlarda okuyabilir ve yazabilirim?
MSG (Outlook Mesaj), EML (RFC 5322 / MIME) ve CFB (Compound File Binary) hem okuma hem de yazma için desteklenir. TNEF (winmail.dat), IMAP, SMTP ve POP3 desteklemiyor.
Bir dosya yerine bir mesajı byte olarak nasıl kaydedebilirim?
Çağrı save() veya save_to_eml() İkisi de geri dönmüyor, ikisi std::vector<std::uint8_t>,Bu yazıyı herhangi bir buffer veya akışa yazabilirsiniz.
Hangi C++ standardı gerektirir?
C++17 Kütüphanesi Kullanımı std::filesystem, std::optional,C++17 ile ilgili diğer bilgiler GCC 9+, Clang 10+ ve MSVC 2019+ desteklenmiş olarak listelenmiştir. Projeyi okuyoruz.
Bir paket yöneticisi sürümü var mı (vcpkg, Conan)?
Versiyon 0.1.0 sadece kaynak üzerinden dağıtılır. depolama klonlayın ve kullanın add_subdirectory Yukarıda gösterildiği gibi, paket yöneticisi manifesto gelecekte eklenebilir. Serbest bırakın.