C++ dosyalarını nasıl okuyabilirim
Aspose.Email FOSS for C++ lets you open and parse Outlook MSG files with a single Çağrı işlevleri. mapi_message::from_file() ve mapi_message::from_stream() yükleyin Tüm mesajlar – konu, vücut, gönderici, alıcı ve eklenmeler – bir belleğe aktarılır. Outlook veya COM bağımlılığı olmayan bir nesne.
1. Adım - Projeyi Kurun
Klavyeyi klonlayın ve kendi CMakeLists.txt:
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)Adım 2 – Header dahil edin
#include "aspose/email/foss/msg/mapi_message.hpp"Bu tek header sağlar mapi_message Tüm destekçilerimizde de bu aspose::email::foss::msg Namespace için.
Adım 3 - Bir dosya yolundan bir mesaj yükleme
kullanmak mapi_message::from_file() Eğer bir a std::filesystem::path:
#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"));
std::cout << "Subject: " << message.subject() << '\n';
std::cout << "From: " << message.sender_name()
<< " <" << message.sender_email_address() << ">\n";
std::cout << "Body: " << message.body() << '\n';
}Adım 4 - Bir akıştan bir mesaj yükleme
kullanmak mapi_message::from_stream() Herhangi birinden ayrılmak için std::istream için yararlı Bir ağ üzerinden veya bir bellek tamponundan alınan MSG verileri işleme:
#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';
}Her zaman akışını açın std::ios::binary Windows Line End’i engellemek için CFB konteynerinin bozulmasından kaynaklanan çeviri.
Adım 5 - Alıcıları İterate Edin
message.recipients() Geri Dönüş A std::vector Her bir nesne, her bir eşya ile display_name, email_address,ve recipient_type alanları :
#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);
for (std::size_t i = 0; i < message.recipients().size(); ++i)
{
const auto& r = message.recipients()[i];
std::cout << "[" << (i + 1) << "] "
<< r.display_name << " <" << r.email_address << ">"
<< " type=" << r.recipient_type << '\n';
}
}Adım 6 - İterate Alaşımlar
message.attachments() Geri Dönüş A std::vector Her bir nesneye bağlıdır. her bir Eksponatörler filename, mime_type, data (Kırmızı bir çubukla), content_id,ve o is_embedded_message() Ömer Öztürk :
#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);
for (std::size_t i = 0; i < message.attachments().size(); ++i)
{
const auto& a = message.attachments()[i];
std::cout << "[" << (i + 1) << "] "
<< a.filename << " mime=" << a.mime_type
<< " bytes=" << a.data.size()
<< " embedded=" << (a.is_embedded_message() ? "yes" : "no")
<< '\n';
}
}Yaygın Sorunlar ve Çözümler
boşluk body() Yükleme sonrası. Bazı mesajlar sadece HTML vücudu içinde metni depolamaktadır. Malı kontrol et message.html_body() Ne zaman message.body() Boş bir şerit geri verir.
Akışa açılmadan std::ios::binary. Windows’ta, metin modları akışları çevirisi CRLF dizileri, ikili CFB verilerini sessizce bozar. her zaman MSG dosyalarını açık tutun std::ios::binary.
msg_exception Bir dosya için geçerli bir görünüm. Dosya gerçektir kontrol edin MSG Bazı dışa aktarma araçları tarafından kaydedilen dosyalar basit metin veya MIME ve Parçalanamazlar için mapi_message::from_file().
recipients() Boş bir vektor döndürür. Eski MSG dosyaları bazen alıcıyı kaçırır Tablo, ancak depoda gösterilen alıcılar display_to Eşya taşıma: İletişimden ulaşılabilir message.get_property_value() ile common_message_property_id::display_to ve property_type_code::ptyp_string.
Büyük miktarda veri hafızada. İÇİNmapi_message::from_file() ve from_stream() Tüm dosyaları açın.Büyük dosyalar için, tüm ek baytları da dahil olmak üzere bütün mesajı yükleyin. Konteynerler ile ilgili bilgiler msg_reader ve tamamen dökülmeyen akışları kontrol etme Bunları materyalize etmek.
Sık Sorulan Sorular
Arasındaki fark nedir from_file() ve from_stream()?
Her ikisi de aynı ürünü üretiyor. mapi_message Objektif olarak. from_file() kabul et a std::filesystem::path Dosyayı içeriden açın. from_stream() Okumak için herhangi std::istream sağlarsanız - MSG verileri zaten hafıza veya Bir soket üzerinde duruyor.
yapıyor from_file() Dosya yükleme sonrasında açılır mı?
Dosya açıldı, tamamen hafıza içine parsel edildi ve daha önce kapatıldı. from_file() Arama yaptırdıktan hemen sonra kaynak dosyasını taşıyabilir veya silebilirsiniz.
MacOS veya Linux’ta Outlook tarafından oluşturulan MSG dosyalarını okuyabilir miyim?
MSG biçimi (OLE Compound File + MAPI özellikleri) tüm içeriğe taşınabilir. İşletim Sistemi: Herhangi bir .msg Outlook’un herhangi bir sürümünden oluşturulan dosyaları açabilirsiniz. ile mapi_message::from_file().
HTML vücudunu nasıl okuyabilirim?
Çağrı message.html_body().Mesaj sadece basit metin bir vücut ile oluşturulduysa, Bu sayede boş bir dizi döndürülür. message.body() Basit metin vücudu geri verir.
Sıkı mod var mıdır?
mapi_message::from_file(path, strict) ve from_stream(stream, strict) kabul etme seçenekleri strict Boolean. default ise false,Küçük yapıya dayanıklı olan Gerçek dünya dosyalarındaki farklılıklar.