Jak przekształcić EML w MSG w C++

Jak przekształcić EML w MSG w C++

Aspose.Email FOSS for C++ supports bidirectional conversion between EML (RFC 5322 / MIME (Map) i MSG (Outlook MAPI) formaty. mapi_message::load_from_eml() Importować jeden plik EML, a następnie mapi_message::save() Wpisz go jako MSG - i odwrotnie z mapi_message::from_file() Następnie przez mapi_message::save_to_eml().

Krok 1 – Zorganizuj projekt

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)

Krok 2 – Konwersja EML do MSG (Przekierowanie plików)

mapi_message::load_from_eml() rozkłada plik EML i wyświetla jego właściwości poprzez Standardy mapi_message Interfejs - połączenie save() Aby uzyskać wynik 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";
}

Krok 3 – Konwertowanie EML na MSG (Stream)

Wykorzystuj przepływ nadmierny load_from_eml() kiedy dane EML pochodzą z sieci socket, buffer pamięci lub inny 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"));
}

Krok 4 – Konwersja MSG do EML

Pobierz istniejący plik MSG z mapi_message::from_file(),Następnie zarejestruj się w EML. Format z 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";
}

Krok 5 – pełna rundowa podróż (EML → MSG → EML)

Poniższy przykład pokazuje, że przedmiot, ciało, nadawca, odbiorcy i załączniki są zachowane przez kompletną trasę okrągłą:

#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';
}

Krok 6 – Konwersja do EML Bytes w pamięci

Obie save() i save_to_eml() Złoty argument, który powraca std::vector<std::uint8_t>, przydatne do transmisji wyników na połączenie sieciowe lub bazy danych bez dotyku systemu plików:

#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();
}

Wspólne problemy i rozwiązania

load_from_eml() Wpisz w plik EML, który wygląda jak ważny. Sprawdź plik używa RFC 5322 Archiwum EML eksportowane przez niektóre narzędzia mogą używać tylko LF. Biblioteka Wymagane są standardowe linie końcowe.

Brak załączników po EML → konwersji MSG. Potwierdź, że EML zawiera standard MIME multipart/mixed lub multipart/related Wpisy z podziału. wtyczki obrazy odniesione przez cid: Są one prowadzone jako załączniki w MSG i powinny być obecne.

Ciało HTML utracone po MSG → EML. Zawartość HTML jest zachowana przez okrągły wycieczkę Kiedy message.html_body() Nie jest to bezradne, jeśli tylko message.body() Znajduje się w źródło MSG, EML będzie zawierać tylko jedną część płasko-tekstową.

save_to_eml() Wydajność strumieni jest pusta. Otwarte źródła z std::ios::binary.Strumieni w trybie tekstowym zepsują strukturę MIME na Windows.

Subiekt zawiera ?= Kodowanie artefaktów. To są RFC 2047 kodowane słowa sekwencje w oryginalnym EML. biblioteka zachowuje je jako-i. Decod z biblioteką RFC 2047 Jeśli potrzebujesz podmiotu Unicode.

Często zadawane pytania

Czy w obu kierunkach konwersji przechowywane są załączniki?

Obie EML → MSG i MSM → konwersje EMM przewożą wszystkie załączniki MIME przez mapi_message Lista przypisów. przyczepy binarne są reprezentowane jako surowe bajty w mapi_attachment::data.

Czy EML → MSG zachowuje ciało HTML?

Jeśli EML zawiera text/html MIME część, jest przechowywana w organizmie HTML MAPI nieruchomości i zwrócone przez message.html_body() po ładowaniu.

Czy mogę zamienić katalog plików EML?

Wpisz katalog z std::filesystem::directory_iterator i wezwanie mapi_message::load_from_eml() Na każdym .eml Ścieżka, a następnie przechowywanie 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);
        }
    }
}

Co jest przechowywane podczas konwersji EML ↔ MSG?

Subject, płaski tekst ciała, HTML ciała nazwy wysyłek i adres e-mail, listy odbiorców i wszystkie załączniki MIME. flagi IMAP, kierowania nagłówków poza podstawowych nagród transportu, a TNEF kodowane dane nie są zachowane.

Jest load_from_eml() Czy jest bezpieczny?

Każdy wezwanie do load_from_eml() Tworzy niezależny mapi_message Przykładowo - Ty Można go nazywać z wielu strun jednocześnie, tak długo jak każdy strumień używa własnego. Obiekty wiadomości.

Zobacz również

 Polski