Envio de email em C++: bibliotecas e exemplos de código

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Envio de email em C++: visão geral das bibliotecas e exemplos práticos



O envio de e-mail é uma das tarefas padrão em aplicações servidoras e desktop. Apesar de C++ não ter suporte nativo para protocolos de e-mail, existem várias bibliotecas maduras que permitem integrar o envio de email (incluindo com anexos e criptografia TLS/SSL) ao seu projeto. Neste artigo, abordaremos três abordagens principais: o uso de libcurl, das bibliotecas VMime e POCO C++ Libraries.



1. Envio de email com libcurl



libcurl é uma poderosa biblioteca multiplataforma para transferência de dados por vários protocolos, incluindo SMTP, SMTPS e SMTP com STARTTLS. Ela faz parte do projeto cURL e está disponível para praticamente todos os sistemas operacionais.



Instalação do libcurl

No Ubuntu/Debian:

sudo apt-get install libcurl4-openssl-dev

No macOS (via Homebrew):

brew install curl

No Windows, você pode baixar DLLs pré-compiladas ou compilar via vcpkg.



Exemplo: mensagem simples sem anexos

O código a seguir conecta-se a um servidor SMTP (Gmail SMTP com SSL), autentica e envia uma mensagem de texto.

#include <iostream>#include <string>#include <curl/curl.h>

int main() { CURL *curl = curl_easy_init(); if (!curl) return 1;

// Configurações SMTP Gmail curl_easy_setopt(curl, CURLOPT_URL, "smtps://smtp.gmail.com:465"); curl_easy_setopt(curl, CURLOPT_USERNAME, "seu_email@gmail.com"); curl_easy_setopt(curl, CURLOPT_PASSWORD, "sua_senha_de_app");

// Dados da mensagem const char *payload_text = "To: destinatario@exemplo.com\\r" "From: seu_email@gmail.com\\r" "Subject: Mensagem de teste de C++\\r" "\\r" "Olá! Esta mensagem foi enviada usando libcurl.\\r";

curl_easy_setopt(curl, CURLOPT_MAIL_FROM, "seu_email@gmail.com"); struct curl_slist *recipients = NULL; recipients = curl_slist_append(recipients, "destinatario@exemplo.com"); curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients); curl_easy_setopt(curl, CURLOPT_READDATA, payload_text);

// Envio CURLcode res = curl_easy_perform(curl); if (res != CURLE_OK) std::cerr << "Erro: " << curl_easy_strerror(res) << std::endl;

curl_slist_free_all(recipients); curl_easy_cleanup(curl); return 0;}


Características do libcurl

  • Suporte a SMTP, SMTPS (SSL/TLS) e STARTTLS.
  • Possibilidade de envio de anexos via formatação MIME (manual ou com curl_mime).
  • Controle de baixo nível — você monta manualmente os cabeçalhos e o corpo da mensagem.
  • Excelente documentação e suporte da comunidade.


2. Biblioteca VMime



VMime é uma biblioteca C++ especializada para trabalhar com e-mail. Ela fornece uma API de alto nível para criar, analisar e enviar mensagens com suporte a MIME, anexos e todos os protocolos de e-mail modernos.



Instalação do VMime

Recomenda-se compilar a partir do código-fonte usando CMake:

git clone https://github.com/kisli/vmime.gitcd vmimemkdir build && cd buildcmake .. -DVMIME_BUILD_SAMPLES=ONmake -j4sudo make install

Para funcionar com SSL, são necessárias as bibliotecas libgsasl e libssl-dev.



Exemplo: envio de mensagem com anexo

#include <vmime/vmime.hpp>#include <iostream>

int main() { try { // Criando uma sessão vmime::shared_ptr<vmime::net::session> session = vmime::net::session::create();

// Configuração do transporte (SMTP com SSL) vmime::shared_ptr<vmime::net::transport> trans

Recommendations