Envío de email en C++: bibliotecas y ejemplos de código

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Envío de email en C++: resumen de bibliotecas y ejemplos prácticos



El envío de correo electrónico es una de las tareas estándar en aplicaciones de servidor y de escritorio. A pesar de que C++ no tiene soporte integrado para trabajar con protocolos de correo, existen varias bibliotecas maduras que permiten integrar el envío de email (incluyendo adjuntos y cifrado TLS/SSL) en su proyecto. En este artículo, analizaremos tres enfoques principales: el uso de libcurl, las bibliotecas VMime y POCO C++ Libraries.



1. Envío de email con libcurl



libcurl es una potente biblioteca multiplataforma para la transferencia de datos a través de varios protocolos, incluyendo SMTP, SMTPS y SMTP con STARTTLS. Forma parte del proyecto cURL y está disponible para prácticamente todos los sistemas operativos.



Instalación de libcurl

En Ubuntu/Debian:

sudo apt-get install libcurl4-openssl-dev

En macOS (a través de Homebrew):

brew install curl

En Windows puede descargar DLL precompilados o compilarlo mediante vcpkg.



Ejemplo: correo simple sin adjuntos

El siguiente código se conecta a un servidor SMTP (Gmail SMTP con SSL), se autentica y envía un correo de texto.

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

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

// Configuración SMTP Gmail curl_easy_setopt(curl, CURLOPT_URL, "smtps://smtp.gmail.com:465"); curl_easy_setopt(curl, CURLOPT_USERNAME, "su_email@gmail.com"); curl_easy_setopt(curl, CURLOPT_PASSWORD, "su_contraseña_de_aplicación");

// Datos del correo const char *payload_text = "To: destinatario@example.com\\r" "From: su_email@gmail.com\\r" "Subject: Correo de prueba desde C++\\r" "\\r" "¡Hola! Este correo fue enviado usando libcurl.\\r";

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

// Envío CURLcode res = curl_easy_perform(curl); if (res != CURLE_OK) std::cerr << "Error: " << curl_easy_strerror(res) << std::endl;

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


Características de libcurl

  • Soporte para SMTP, SMTPS (SSL/TLS) y STARTTLS.
  • Posibilidad de enviar adjuntos mediante formato MIME (manual o con curl_mime).
  • Control de bajo nivel: se redactan manualmente los encabezados y el cuerpo del correo.
  • Excelente documentación y soporte de la comunidad.


2. Biblioteca VMime



VMime es una biblioteca especializada de C++ para trabajar con correo electrónico. Proporciona una API de alto nivel para crear, analizar y enviar mensajes con soporte para MIME, adjuntos y todos los protocolos de correo modernos.



Instalación de VMime

Se recomienda compilar desde el código fuente usando CMake:

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

Para trabajar con SSL se necesitan las bibliotecas libgsasl y libssl-dev.



Ejemplo: envío de correo con adjunto

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

int main() { try { // Creamos una sesión vmime::shared_ptr<vmime::net::session> session = vmime::net::session::create();

// Configuración del transporte (SMTP con SSL) vmime::shared_ptr<vmime::net::transport> trans

Recommendations