Bevezetés
A Aspose.Email FOSS for C++ egy új nyílt forráskódú könyvtár az Outlook MSG fájlok, az RFC 5322 EML üzenetek és a Compound File Binary (CFB) tárolók, amelyekre az MSG formátum épül, olvasására, létrehozására és konvertálására. C++17-ben íródott, nincs külső futásidejű függősége, és Linuxon, macOS-en és Windowson a CMake segítségével építhető — nincs COM függőség és nincs platformspecifikus kódrész.
Az Outlook MSG fájlok folyamatosan megjelennek vállalati integrációs munkákban — archiválási csővezetékek, migrációs eszközök, megfelelőségi exportok —, de Outlook nélkül történő olvasásuk általában COM automatizálást Windowson vagy kereskedelmi könyvtárat jelentett. A Aspose.Email FOSS for C++ egy hordozható alternatívát kínál: egy magas szintű mapi_message osztályt a mindennapi üzenetolvasáshoz és -létrehozáshoz, valamint alacsonyabb szintű msg_reader, msg_document és cfb_reader osztályokat a mögöttes tárolóformátum közvetlen eléréséhez, ha szükséges.
A könyvtár C++17 forráskódként, MIT licenc alatt kerül terjesztésre, és egy CMake alkönyvtárként adható hozzá egy projekthez, amely a AsposeEmailFoss célt (target) teszi elérhetővé — nem szükséges csomagkezelő regisztráció és előre lefordított binárisok.
Főbb jellemzők
Outlook MSG fájlok olvasása
Nyisson meg egy .msg fájlt a msg_reader::from_file() vagy a msg_reader::from_stream() segítségével. Egy üzenet tárolóinak és adatfolyamainak közvetlen eléréséhez csomagolja be az olvasót egy msg_document objektumba a msg_document::from_reader() használatával.
#include "aspose/email/foss/msg/msg_reader.hpp"
#include "aspose/email/foss/msg/msg_document.hpp"
#include <filesystem>
namespace aef = aspose::email::foss;
auto reader = aef::msg::msg_reader::from_file(
std::filesystem::path("message.msg"), /*strict=*/false);
auto document = aef::msg::msg_document::from_reader(reader);
Üzenetek létrehozása programozottan
mapi_message::create() egy új memóriában lévő üzenetet hoz létre tárgy és törzs alapján. Állítsa be a feladót, adjon hozzá címzetteket, és csatoljon bináris vagy szöveges terhelést, mielőtt save()-vel mentené.
#include "aspose/email/foss/msg/mapi_message.hpp"
#include <filesystem>
namespace aef = aspose::email::foss;
auto message = aef::msg::mapi_message::create(
"Quarterly status update", "Hello team,\n\nRollout summary attached.");
message.set_sender_name("Build Agent");
message.set_sender_email_address("build.agent@example.com");
message.add_recipient("alice@example.com", "Alice Example");
message.add_recipient("carol@example.com", "Carol Example",
aef::msg::mapi_message::recipient_type_cc);
message.add_attachment("report.txt", std::vector<std::uint8_t>{'o', 'k'}, "text/plain");
message.save(std::filesystem::path("output.msg"));
Átalakítás MSG és EML között
mapi_message::save_to_eml() a jelenlegi üzenetet RFC 5322 EML fájlként írja, és mapi_message::load_from_eml() visszaolvassa azt. Mindkét irány megőrzi a tárgyat, feladót, címzetteket és a csatolmányokat, így az üzenet Outlook nélkül is mozoghat MSG és EML között.
auto message = aef::msg::mapi_message::from_file(
std::filesystem::path("message.msg"), /*strict=*/false);
message.save_to_eml(std::filesystem::path("message.eml"));
auto restored = aef::msg::mapi_message::load_from_eml(std::filesystem::path("message.eml"));
restored.save(std::filesystem::path("restored.msg"));
Üzenettulajdonságok és csatolmányok vizsgálata
Egy betöltött mapi_message közvetlenül elérhetővé teszi szabványos fejlécmezőit — subject(), sender_name(), sender_email_address(), message_class() és internet_message_id() — valamint recipients() és attachments() vektorait, amelyek mapi_recipient és mapi_attachment típusúak. A dedikált accessor nélküli MAPI mezőkhöz a get_property_value() bármely tulajdonságot olvas a common_message_property_id és property_type_code alapján.
#include "aspose/email/foss/msg/mapi_message.hpp"
#include "aspose/email/foss/msg/common_message_property_id.hpp"
#include "aspose/email/foss/msg/property_type_code.hpp"
#include <iostream>
namespace aef = aspose::email::foss;
template <typename E>
constexpr auto to_underlying(E value) noexcept {
return static_cast<std::underlying_type_t<E>>(value);
}
auto message = aef::msg::mapi_message::from_file(
std::filesystem::path("message.msg"), /*strict=*/false);
std::cout << "Subject: " << message.subject() << '\n';
std::cout << "From: " << message.sender_name()
<< " <" << message.sender_email_address() << ">\n";
std::cout << "Recipients: " << message.recipients().size() << '\n';
for (const auto& attachment : message.attachments()) {
std::cout << "- " << attachment.filename
<< " (" << attachment.mime_type << ", "
<< attachment.data.size() << " bytes)\n";
}
const auto display_cc = message.get_property_value(
to_underlying(aef::msg::common_message_property_id::display_cc),
to_underlying(aef::msg::property_type_code::ptyp_string));
Alacsony szintű CFB tároló hozzáférés
Az MSG fájlok egy Compound File Binary (CFB) tárolóban vannak elhelyezve — ez a struktúrált tárolási formátum, amelyet a régi Office bináris formátumok is használnak. cfb_reader megnyitja a nyers tárolót és közvetlenül elérhetővé teszi a könyvtárfáját: storage_ids() és stream_ids() felsorolják az összes bejegyzést, directory_entry_count() jelenti a teljes számot, és header() visszaadja a tároló szektor elrendezését. Ez hasznos, ha olyan MAPI adatokra van szükség, amelyet a mapi_message API nem hoz felszínre.
#include "aspose/email/foss/cfb/cfb_reader.hpp"
#include <iostream>
namespace aef = aspose::email::foss;
auto cfb = aef::cfb::cfb_reader::from_file(std::filesystem::path("message.msg"));
std::cout << "Directory entries: " << cfb.directory_entry_count() << '\n';
std::cout << "Storages: " << cfb.storage_ids().size() << '\n';
std::cout << "Streams: " << cfb.stream_ids().size() << '\n';
Gyors kezdés
Add hozzá a könyvtárat a projektedhez:
git clone https://github.com/aspose-email-foss/Aspose.Email-FOSS-for-Cpp.git# CMakeLists.txt
add_subdirectory(Aspose.Email-FOSS-for-Cpp)
target_link_libraries(your_target PRIVATE AsposeEmailFoss::AsposeEmailFoss)Ezután hozzon létre egy üzenetet, mentse el MSG-ként, és konvertálja vissza EML-re:
#include "aspose/email/foss/msg/mapi_message.hpp"
#include <filesystem>
#include <vector>
#include <cstdint>
namespace aef = aspose::email::foss;
int main() {
auto message = aef::msg::mapi_message::create("Hello from C++", "Body text here");
message.set_sender_name("Alice");
message.set_sender_email_address("alice@example.com");
message.add_recipient("bob@example.com", "Bob");
message.add_attachment("note.txt", std::vector<std::uint8_t>{'a', 'b', 'c'}, "text/plain");
message.save(std::filesystem::path("hello.msg"));
auto loaded = aef::msg::mapi_message::from_file(
std::filesystem::path("hello.msg"), /*strict=*/false);
loaded.save_to_eml(std::filesystem::path("hello.eml"));
return 0;
}
Támogatott formátumok
| Formátum | Kiterjesztés | Olvasás | Írás |
|---|---|---|---|
| Outlook üzenet (MSG) | .msg | ✓ | ✓ |
| EML (RFC 5322 / MIME) | .eml | ✓ | ✓ |
| Compound File Binary (CFB) | .cfb | ✓ | ✓ |
Nyílt forráskód & licencelés
Aspose.Email FOSS a C++-hez MIT licenc alatt kerül kiadásra. A teljes forrás elérhető itt: aspose-email-foss/Aspose.Email-FOSS-for-Cpp, és a kereskedelmi felhasználás jogdíj nélkül megengedett. A könyvtárnak nincsenek futásidejű függőségei a C++17 fordító és a CMake 3.26 vagy újabb verziója kivételével.