Como começar com o Aspose.Email FOSS para C++

Como começar com o Aspose.Email FOSS para C++

Aspose.Email FOSS for C++ is a library for reading and writing Outlook MSG files, EML messages, and CFB containers. It has no third-party dependencies and requires only a C++17 compiler and CMake.

Passo 1 – Clone e adicione ao seu projeto CMake

git clone https://github.com/aspose-email-foss/Aspose.Email-FOSS-for-Cpp.git

Adicione a biblioteca como um subdiretório e vincule-a ao seu CMakeLists.txt:

add_subdirectory(Aspose.Email-FOSS-for-Cpp)
target_link_libraries(your_target PRIVATE AsposeEmailFoss::AsposeEmailFoss)

A biblioteca usa apenas a biblioteca padrão C++ e não tem dependências de terceiros. GCC 9+, Clang 10+ e MSVC 2019+ são relatados como suportados no projeto README.


Passo 2 – Leia um arquivo MSG

Inclui o mapi_message Header e abra um arquivo com mapi_message::from_stream():

#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';
    std::cout << "From: "    << message.sender_email_address() << '\n';
    std::cout << "Body: "    << message.body() << '\n';

    for (const auto& recipient : message.recipients())
        std::cout << "To: " << recipient.email_address << '\n';

    for (const auto& attachment : message.attachments())
        std::cout << "Attachment: " << attachment.filename
                  << " (" << attachment.mime_type << ")\n";
}

mapi_message::from_stream() analisa o contêiner CFB do arquivo MSG e expõe todos os MAPI Propriedades através de métodos de acessório digitados.Não é necessária nenhuma instalação do Microsoft Outlook.


Passo 3 – Criar um novo arquivo MSG

Usar mapi_message::create() Para criar uma mensagem na memória, defina o remetente e o receptor. campos, e salvar para o disco com save():

#include <fstream>
#include "aspose/email/foss/msg/mapi_message.hpp"

int main()
{
    auto message = aspose::email::foss::msg::mapi_message::create(
        "Meeting Notes", "Please find the agenda attached.");

    message.set_sender_name("Alice");
    message.set_sender_email_address("alice@example.com");
    message.add_recipient("bob@example.com", "Bob");
    message.add_attachment(
        "agenda.txt",
        std::vector<std::uint8_t>{'I', 't', 'e', 'm', ' ', '1'},
        "text/plain");

    std::ofstream output("meeting_notes.msg", std::ios::binary);
    message.save(output);
}

mapi_message::create() Produzir uma mensagem de memória. save() aceita um caminho de arquivo, uma std::ostream, ou não argumentos (retornando a std::vector<std::uint8_t>).


Passo 4 — Converter EML para MSG (e Voltar)

Carregar um arquivo EML com mapi_message::load_from_eml(), em seguida, serialize para MSG com save().A volta-trip preserva o assunto, corpo de texto simples, propriedade do corpo HTML, Enviadores, destinatários e anexos:

#include <filesystem>
#include <iostream>
#include "aspose/email/foss/msg/mapi_message.hpp"

int main()
{
    // EML → MSG
    auto message = aspose::email::foss::msg::mapi_message::load_from_eml(
        std::filesystem::path("message.eml"));

    std::cout << "Subject: " << message.subject() << '\n';
    message.save(std::filesystem::path("converted.msg"));

    // MSG → EML round-trip
    auto loaded = aspose::email::foss::msg::mapi_message::from_file(
        std::filesystem::path("converted.msg"));
    loaded.save_to_eml(std::filesystem::path("roundtrip.eml"));

    std::cout << "Saved converted.msg and roundtrip.eml\n";
}

Problemas Comuns e Soluções

O modo binário não é definido no fluxo. Abrir um arquivo com std::ifstream input("file.msg") Sem std::ios::binary pode causar tradução de final de linha do Windows que corrompe o CFB Conteúdo - Passagem std::ios::binary para os fluxos de entrada e saída.

Erro de esquerda: AsposeEmailFoss::AsposeEmailFoss Não encontrado . Verifique isso add_subdirectory(Aspose.Email-FOSS-for-Cpp) Aparece antes target_link_libraries(...) Em seu CMakeLists.txt,e que o nome do sub-diretor O clone da pasta é exatamente o mesmo.

C++17 não é ativado. A biblioteca requer recursos C++17. Se o compilador relatar erros de ligações estruturadas ou std::filesystem,Adicionar set(CMAKE_CXX_STANDARD 17) Na A O topo da sua CMakeLists.txt Antes do add_subdirectory Chamem por.

O corpo ou o objeto vazio após a leitura. Alguns arquivos MSG armazenam texto em propriedades do Unicode enquanto outros usam propriedades de página de código ANSI. message.subject() e message.body() Retornar a cadeia de onde quer que o armazenamento esteja presente; verifique message.html_body() Se message.body() É um vazio.

load_from_eml lança em malformado EML. Verifique se o arquivo EML usa RFC 5322 linhas de terminação (CRLF) e tem cabeçalhos MIME válidos. A biblioteca não salta silenciosamente Capitais mal formados.

Perguntas Frequentes

A biblioteca requer o Microsoft Outlook ou qualquer componente COM?

Aspose.Email FOSS para C++ usa seu próprio analisador CFB e MAPI e não tem dependências de terceiros. Ele funciona em Linux, macOS e Windows sem o Outlook instalado.

Que formatos posso ler e escrever?

MSG (Outlook Message), EML (RFC 5322 / MIME) e CFB (Compound File Binary) são suportados para leitura e escrita. TNEF (winmail.dat), IMAP, SMTP e POP3 não são apoiados.

Como posso salvar uma mensagem em bytes ao invés de um arquivo?

Chamem save() ou save_to_eml() Sem argumentação, ambos retornam. std::vector<std::uint8_t>, que você pode escrever para qualquer buffer ou fluxo.

Quais são os padrões C++ necessários?

C++17 - A biblioteca utiliza std::filesystem, std::optional,e outros C++17 GCC 9+, Clang 10+ e MSVC 2019+ estão listados como suportados em O projeto está lido.

Existe uma versão do gerenciador de pacotes (vcpkg, Conan)?

A versão 0.1.0 é distribuída apenas através da fonte. Clone o repositório e use add_subdirectory Como mostrado acima, os manifestos do gerenciador de pacotes podem ser adicionados no futuro. libertação .

Veja também

 Português