C++ dosyalarını nasıl okuyabilirim

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.git
add_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.

Bu da

 Türkçe