Envío de Email en C++: bibliotecas e implementación

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 correos electrónicos es una de las tareas clave para muchas aplicaciones: desde sistemas de monitoreo y notificaciones hasta clientes de correo completos. El lenguaje C++ no tiene soporte incorporado para el protocolo SMTP, pero existen potentes bibliotecas de terceros que permiten integrar fácilmente el envío de email. En este artículo, revisaremos las herramientas más populares, su instalación y proporcionaremos ejemplos de código funcionales.



Formas principales de enviar Email en C++



Existen tres enfoques principales para enviar correos en C++:



  • Uso de libcurl — la biblioteca más popular y flexible. Soporta SMTP, SMTP-SSL, SMTP-STARTTLS.
  • Uso de VMime — biblioteca especializada para trabajar con mensajes MIME, cifrado y archivos adjuntos.
  • Trabajo directo con sockets — enfoque de bajo nivel que requiere implementación manual del protocolo SMTP.


En esta guía nos centraremos en libcurl como la solución más versátil y ampliamente utilizada.



Instalación de libcurl



Para trabajar con SMTP a través de libcurl, necesitará instalar la biblioteca y sus archivos de cabecera. Ejemplos para diferentes sistemas operativos:



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

# CentOS / Fedorasudo yum install libcurl-devel

# macOS (a través de Homebrew)brew install curl

# Windows (a través de vcpkg)vcpkg install curl


Asegúrese de que su compilación de curl incluya soporte para los protocolos SMTP y SSL. Puede verificarlo con el comando:



curl --version | grep -i smtp


Ejemplo simple: envío de un correo de texto



Veamos un ejemplo básico de envío de email a través del servidor SMTP de Gmail usando libcurl. Para un envío exitoso, necesitará una contraseña de aplicación (App Password) para Gmail.



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

// Estructura para transmitir datos del correostruct upload_status { int lines_read; const char **payload_text;};

// Función de callback para leer el cuerpo del correostatic 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 del correo (cada línea es un elemento separado) const char *payload_text[] = { "From: Su Nombre <youremail@gmail.com>\\r", "To: Destinatario <recipient@example.com>\\r", "Subject: ¡Saludos desde C++!\\r", "\\r", // línea vacía — separador entre encabezados y cuerpo "Este es un correo de prueba enviado con libcurl en 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) { // Configuración del servidor SMTP de 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, "su_contraseña_de_aplicación");

// Especificamos el remitente y el destinatario curl_easy_setopt(curl, CURLOPT_MAIL_FROM, "<youremail@gmail.com>"); recipients = curl_slist_append(recipients, "<recipie

Recommendations