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 También en la biblioteca
prometheus/client_golang para Go: guía completa con ejemplos
Frameworks CLI para Go (Golang): revisión completa de herramientas para crear aplicaciones de consola
Monitoreo de aplicaciones Rust: la biblioteca `tracing`
Proptest Rust: guía completa con ejemplos prácticos
Paging 3 para Kotlin: guía completa con ejemplos prácticos