Envío de correo electrónico en C++: libcurl y clientes SMTP

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 correo electrónico en C++: resumen de bibliotecas y herramientas

El envío de correo electrónico es una de las tareas básicas para muchas aplicaciones: desde sistemas de monitoreo hasta notificaciones a usuarios. En C++, esta tarea se resuelve de varias maneras, desde el uso directo de sockets hasta potentes bibliotecas que soportan cifrado, MIME y archivos adjuntos. En este artículo, revisaremos las mejores herramientas para enviar correos electrónicos en C++ y mostraremos ejemplos de código.



¿Por qué C++ para enviar correos electrónicos?

C++ brinda control total sobre las conexiones de red, el rendimiento y la memoria. Sin embargo, la biblioteca estándar de C++ no incluye herramientas integradas para trabajar con protocolos de correo (SMTP, POP3, IMAP). Por lo tanto, los desarrolladores utilizan bibliotecas de terceros o implementan el protocolo manualmente a través de sockets. Nos centraremos en soluciones listas para usar que ahorran tiempo y garantizan estabilidad.



Principales bibliotecas para enviar correos electrónicos en C++

  • libcurl — la biblioteca multiplataforma más popular para transferencia de datos. Soporta SMTP, SMTP con SSL/TLS, autenticación y archivos adjuntos MIME.
  • VMime — biblioteca especializada para trabajar con correos electrónicos. Soporte completo de MIME, cifrado S/MIME, encabezados personalizados y todos los protocolos de correo.
  • c-icap y libESMTP — bibliotecas de más bajo nivel, orientadas a sesiones SMTP.
  • Boost.Asio + implementación propia de SMTP — para quienes desean mínimas dependencias y están dispuestos a escribir el protocolo manualmente.

En este artículo nos detendremos en libcurl, ya que es la más versátil y ampliamente utilizada.



Instalación de libcurl

Para comenzar a trabajar con libcurl, es necesario instalarla:

  • Linux (Ubuntu/Debian): sudo apt install libcurl4-openssl-dev
  • macOS: brew install curl
  • Windows: descargue los binarios precompilados desde el sitio oficial o use vcpkg: vcpkg install curl


Ejemplo 1: Envío de un correo electrónico simple a través de Gmail (SSL)

En este ejemplo se utiliza libcurl para enviar un correo a través del servidor SMTP de Gmail con cifrado 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) { // Configuración 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, "su.email@gmail.com"); curl_easy_setopt(curl, CURLOPT_PASSWORD, "contraseña_de_aplicación");

// Remitente y destinatario 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);

// Texto del correo const char *payload_text = "From: Su Nombre <su.email@gmail.com>\\r" "To: Destinatario <destinatario@example.com>\\r" "Subject: Correo de prueba desde C++\\r" "\\r" "¡Hola! Este correo fue enviado usando libcurl en C++.\\r";

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

// Ejecución res = curl_easy_perform(curl); if(res != CURLE_OK) fprintf(stderr, "Error: %s", curl_easy_strerror(res)); else printf("¡Correo enviado!");

curl_slist_free_all(recipients); curl_eas

Recommendations