Πώς να μετατρέψετε το EML σε MSG στο C++

Πώς να μετατρέψετε το EML σε MSG στο C++

Aspose.Email FOSS for C++ supports bidirectional conversion between EML (RFC 5322 / MIME (MAPI) και MSG (Outlook MAPI). χρησιμοποιήστε το mapi_message::load_from_eml() Για να εισαγάγει ένα ΕΠΙΤΡΟΦΗ EML, τότε mapi_message::save() να γράψει ως MSG - και το αντίστροφο με την mapi_message::from_file() Ακολουθείται από mapi_message::save_to_eml().

Βήμα 1 - Εισάγετε το έργο

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)

Βήμα 2 – Μετατρέψτε το EML σε MSG (Πρόθυρο αρχείων)

mapi_message::load_from_eml() διαλύει το αρχείο EML και εκθέτει τις ιδιότητές του μέσω της Το πρότυπο mapi_message ΕΡΕΥΝΑ - Κλήση save() Για να γράψετε το αποτέλεσμα ως 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";
}

Βήμα 3 – Μετατρέψτε το EML σε MSG (Stream)

Χρησιμοποιήστε το υπερφόρτωση του ρεύματος load_from_eml() Όταν τα δεδομένα EML προέρχονται από ένα δίκτυο Σοκ, μνήμης μπαφάρ ή άλλο 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"));
}

Βήμα 4 – Μετατρέψτε το MSG σε EML

Κατεβάστε ένα υπάρχον αρχείο MSG με mapi_message::from_file(),και μετά σερικαλίξτε στο EML Η μορφή με 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";
}

Βήμα 5 – Full Round-Trip (EML → MSG → EML)

Το παρακάτω παράδειγμα δείχνει ότι το αντικείμενο, το σώμα, ο αποστολέας, οι παραλήπτες και τα συνημμένα διατηρούνται όλα μέσα από μια πλήρη γύρο-δρόμου:

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

Βήμα 6 – Μετατρέψτε EML Bytes σε Μνήμη

Και οι δύο save() και save_to_eml() 0 ΑΡΓΟΜΕΝΑ ΠΡΟΕΔΡΙΑ ΣΟΥ ΕΠΙΣΤΡΑΦΕΙ std::vector<std::uint8_t>, χρήσιμο για τα αποτελέσματα streaming σε μια σύνδεση δικτύου ή Η βάση δεδομένων χωρίς να αγγίξετε το σύστημα αρχείων:

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

Κοινά προβλήματα και τακτοποιήσεις

load_from_eml() Το αρχείο εκτυλίσσεται σε ένα έγκυρο EML αρχείου. Ελέγξτε το αρχείο χρησιμοποιώντας RFC 5322 Τα αρχεία EML που εξάγονται από ορισμένα εργαλεία μπορεί να χρησιμοποιούν μόνο LF. Αναμένεται να ολοκληρωθούν οι προδιαγραφές σύμφωνα με το πρότυπο.

Λείπουν τα συνημμένα μετά την EML → MSG μετατροπή. Επαναλάβετε το EML με πρότυπο MIME multipart/mixed ή multipart/related Ετικέτες: Inline εικόνες αναφερόμενη μέσω cid: Εξάλλου, τα στοιχεία αυτά είναι διαθέσιμα στο MSG και πρέπει να υπάρχουν.

Το σώμα HTML χάθηκε μετά το MSG → EML. Το περιεχόμενο του HTML διατηρείται μέσω της περιόδου Όταν message.html_body() Δεν είναι ανοιχτό, αν μόνο message.body() Είναι πληθυσμένος στο πηγή MSG, το EML θα περιέχει μόνο ένα μέρος του κειμένου.

save_to_eml() Η παραγωγή του ρεύματος είναι κενή. Ανοιχτό ρεύμα με std::ios::binary.Οι ροές κειμένου-μόδους διαστρέφουν τη δομή MIME στα Windows.

Το θέμα περιέχει ?= Κωδικοποίηση των αντικειμένων. Αυτό είναι το RFC 2047 κωδικοποιημένο-word ακολουθίες Η βιβλιοθήκη τα διατηρεί ως-α. Αποκωδικοποιείται με μια βιβλία RFC 2047 Αν χρειαστείτε το θέμα Unicode.

Συχνές ερωτήσεις

Τα συνημμένα διατηρούνται και στις δύο κατευθύνσεις μετατροπής;?

Και οι μετατροπές EML → MSG και MSM → EMM φέρνουν όλα τα MIME προσθήκες μέσω της mapi_message Οι δυαδικές προσθήκες αντιπροσωπεύονται ως ριζικά byte σε mapi_attachment::data.

Το EML → MSG διατηρεί το σώμα HTML;?

Εάν το EML περιέχει ένα text/html MIME μέρος, αποθηκεύεται στο σώμα HTML MAPI Η ιδιοκτησία και επιστρέφεται από την message.html_body() Μετά την φόρτιση.

Μπορώ να μετατρέψω ένα αρχείο EML σε μια σειρά?

Ναι. Εισάγετε το κατάλογο με std::filesystem::directory_iterator και καλεί mapi_message::load_from_eml() Σε κάθε .eml Ο δρόμος, με τον οποίο θα σωθεί 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);
        }
    }
}

Τι διατηρείται κατά τη διάρκεια της μετατροπής EML ↔ MSG;?

Θέμα, όργανο κειμένου, σώμα HTML, όνομα αποστολέας και διεύθυνση ηλεκτρονικού ταχυδρομείου, λίστα παραλήπτων και όλα τα συνημμένα MIME. IMAP σημαίες, επικεφαλίδες διαδρομής πέρα από τις βασικές επικέφαλιες μεταφοράς και τα κωδικοποιημένα δεδομένα TNEF δεν διατηρούνται.

Είναι load_from_eml() Υπεύθυνος ίχνος;?

Κάθε κλήση για load_from_eml() Δημιουργεί ανεξάρτητο mapi_message ΕΡΩΤΗΣΗ - ΕΣΕΙΣ Μπορεί να το καλεί από πολλαπλές ίνες ταυτόχρονα, όσο κάθε ινδός χρησιμοποιεί τη δική του. Το αντικείμενο του μηνύματος.

Δείτε επίσης

 Ελληνικά