Envio de email em C++: libcurl e clientes SMTP

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 de bibliotecas e ferramentas

O envio de e-mail é uma das tarefas básicas para muitas aplicações: desde sistemas de monitoramento até notificações de usuários. Em C++, essa tarefa pode ser resolvida de várias maneiras — desde o uso direto de sockets até bibliotecas poderosas que suportam criptografia, MIME e anexos. Neste artigo, vamos explorar as melhores ferramentas para enviar email em C++ e mostrar exemplos de código.



Por que C++ para envio de email?

C++ oferece controle total sobre conexões de rede, desempenho e memória. No entanto, a biblioteca padrão do C++ não contém recursos integrados para trabalhar com protocolos de e-mail (SMTP, POP3, IMAP). Portanto, os desenvolvedores usam bibliotecas de terceiros ou implementam o protocolo manualmente através de sockets. Vamos nos concentrar em soluções prontas que economizam tempo e garantem estabilidade.



Principais bibliotecas para envio de email em C++

  • libcurl — a biblioteca multiplataforma mais popular para transferência de dados. Suporta SMTP, SMTP com SSL/TLS, autenticação e anexos MIME.
  • VMime — biblioteca especializada para trabalhar com e-mail. Suporte completo a MIME, criptografia S/MIME, cabeçalhos personalizados e todos os protocolos de e-mail.
  • c-icap e libESMTP — bibliotecas de nível mais baixo, focadas em sessões SMTP.
  • Boost.Asio + implementação própria de SMTP — para quem deseja o mínimo de dependências e está disposto a escrever o protocolo manualmente.

Neste artigo, vamos nos aprofundar na libcurl, pois ela é a mais versátil e amplamente utilizada.



Instalação da libcurl

Para começar a usar a libcurl, é necessário instalá-la:

  • Linux (Ubuntu/Debian): sudo apt install libcurl4-openssl-dev
  • macOS: brew install curl
  • Windows: baixe os binários pré-compilados do site oficial ou use vcpkg: vcpkg install curl


Exemplo 1: Envio de e-mail simples via Gmail (SSL)

Neste exemplo, usamos a libcurl para enviar um e-mail através do servidor SMTP do Gmail com criptografia SSL.

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

int main(void) { CURL *curl; CURLcode res;

curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init();

if(curl) { // Configurações SMTP curl_easy_setopt(curl, CURLOPT_URL, "smtps://smtp.gmail.com:465"); curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_ALL); curl_easy_setopt(curl, CURLOPT_USERNAME, "seu.email@gmail.com"); curl_easy_setopt(curl, CURLOPT_PASSWORD, "senha_de_aplicativo");

// Remetente e destinatário curl_easy_setopt(curl, CURLOPT_MAIL_FROM, "<seu.email@gmail.com>"); struct curl_slist *recipients = NULL; recipients = curl_slist_append(recipients, "<destinatario@example.com>"); curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients);

// Texto do e-mail const char *payload_text = "From: Seu Nome <seu.email@gmail.com>\\r" "To: Destinatário <destinatario@example.com>\\r" "Subject: E-mail de teste em C++\\r" "\\r" "Olá! Este e-mail foi enviado usando libcurl em C++.\\r";

curl_easy_setopt(curl, CURLOPT_READDATA, payload_text); curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);

// Execução res = curl_easy_perform(curl); if(res != CURLE_OK) fprintf(stderr, "Erro: %s", curl_easy_strerror(res)); else printf("E-mail enviado!");

curl_slist_free_all(recipients); curl_eas

Recommendations