Envio de Email em C++: bibliotecas e implementação

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-mails é uma das tarefas essenciais para muitas aplicações: desde sistemas de monitoramento e notificações até clientes de e-mail completos. Na linguagem C++, não há suporte nativo ao protocolo SMTP, mas existem bibliotecas de terceiros poderosas que permitem integrar facilmente o envio de e-mail. Neste artigo, veremos as ferramentas mais populares, sua instalação e apresentaremos exemplos de código funcionais.



Principais formas de enviar Email em C++



Existem três abordagens principais para enviar e-mails em C++:



  • Uso do libcurl — a biblioteca mais popular e flexível. Suporta SMTP, SMTP-SSL, SMTP-STARTTLS.
  • Uso do VMime — biblioteca especializada para trabalhar com mensagens MIME, criptografia e anexos.
  • Trabalho direto com sockets — abordagem de baixo nível que requer implementação manual do protocolo SMTP.


Neste guia, focaremos no libcurl como a solução mais versátil e amplamente utilizada.



Instalação do libcurl



Para trabalhar com SMTP através do libcurl, você precisará instalar a biblioteca e seus arquivos de cabeçalho. Exemplos para diferentes sistemas operacionais:



# Ubuntu / Debiansudo apt-get install libcurl4-openssl-dev

# CentOS / Fedorasudo yum install libcurl-devel

# macOS (via Homebrew)brew install curl

# Windows (via vcpkg)vcpkg install curl


Certifique-se de que sua compilação do curl inclui suporte aos protocolos SMTP e SSL. Você pode verificar isso com o comando:



curl --version | grep -i smtp


Exemplo simples: envio de e-mail de texto



Vamos considerar um exemplo básico de envio de e-mail através do servidor SMTP do Gmail usando libcurl. Para um envio bem-sucedido, você precisará de uma senha de aplicativo (App Password) para o Gmail.



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

// Estrutura para transmitir dados do e-mailstruct upload_status { int lines_read; const char **payload_text;};

// Função de callback para ler o corpo do e-mailstatic size_t payload_source(void *ptr, size_t size, size_t nmemb, void *userp) { struct upload_status *upload_ctx = (struct upload_status *)userp; const char *data;

if (upload_ctx->lines_read < 5) { data = upload_ctx->payload_text[upload_ctx->lines_read]; if (data) { size_t len = strlen(data); memcpy(ptr, data, len); upload_ctx->lines_read++; return len; } } return 0;}

int main(void) { CURL *curl; CURLcode res = CURLE_OK; struct curl_slist *recipients = NULL; struct upload_status upload_ctx;

// Texto do e-mail (cada linha é um elemento separado) const char *payload_text[] = { "From: Seu Nome <youremail@gmail.com>\\r", "To: Destinatário <recipient@example.com>\\r", "Subject: Olá do C++!\\r", "\\r", // linha em branco — separador entre cabeçalhos e corpo "Este é um e-mail de teste enviado com libcurl em C++.\\r", NULL };

upload_ctx.lines_read = 0; upload_ctx.payload_text = payload_text;

curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init();

if (curl) { // Configuração do servidor SMTP do Gmail curl_easy_setopt(curl, CURLOPT_URL, "smtp://smtp.gmail.com:587"); curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_ALL); curl_easy_setopt(curl, CURLOPT_USERNAME, "youremail@gmail.com"); curl_easy_setopt(curl, CURLOPT_PASSWORD, "sua_senha_de_aplicativo");

// Especifica o remetente e o destinatário curl_easy_setopt(curl, CURLOPT_MAIL_FROM, "<youremail@gmail.com>"); recipients = curl_slist_append(recipients, "<recipie

Recommendations