Compartir
Portada de Drago Mail Sender
Logo de Drago Mail SenderProyecto python · desktopemail

Drago Mail Sender

App de escritorio para enviar campañas de email con tu propio servidor SMTP: cuerpo HTML o de imagen, pie legal a medida, progreso en vivo y envíos programados.

1 mar 20263 minde lectura
Tipo
Escritorio
Motor
Flask + WebView
Envío
SMTP propio
Sistemas
Win · Mac · Linux
año
2026

Qué es Drago Mail Sender

Drago Mail Sender es una aplicación de escritorio para mandar correos masivos a una lista de clientes desde tu propia cuenta: Gmail con contraseña de aplicación, el SMTP de tu dominio o cualquier otro. Cargas los contactos desde un CSV o un Excel, montas el correo, te lo envías de prueba y, cuando está bien, lo lanzas a toda la lista o lo programas para más tarde.

Nació para enviar campañas sin cuotas mensuales ni los límites de un plan gratuito. El generador de pie de correo es, de hecho, la plantilla que diseñé para los envíos de SET PRO. El código es privado.

Portada de Drago Mail Sender: un correo personalizado con {nombre} sale hacia la lista de destinatarios

La aplicación

Editor de correos: asunto con {nombre}, modo HTML o imagen y vista previa

Editor de correos: asunto con {nombre}, modo HTML o imagen y vista previa

Contactos: carga de CSV o Excel y formato recomendado

Contactos: carga de CSV o Excel y formato recomendado

Credenciales SMTP, con la contraseña cifrada en el equipo

Credenciales SMTP, con la contraseña cifrada en el equipo

Selección de columnas (datos demo)

Selección de columnas (datos demo)

Correo en modo imagen (demo)

Correo en modo imagen (demo)

Pie legal y su vista previa (demo)

Pie legal y su vista previa (demo)

Prueba, envío y programación (demo)

Prueba, envío y programación (demo)

HTML o imagen

El cuerpo es código HTML o una sola imagen (ideal para diseños de Canva) con enlace de destino y texto de vista previa para la bandeja.

Listas CSV y Excel

Prueba UTF-8, Latin-1 y CP1252, enseña una vista previa para elegir la columna de email y la de nombre, y descarta direcciones sin arroba.

Pie legal a medida

Editor visual o en código: logo, Instagram y TikTok, texto legal, cláusula RGPD/LSSI y enlace de baja. Se guarda entre sesiones.

Progreso en vivo

El envío masivo transmite cada resultado por Server-Sent Events: enviado o fallido con su error, con una pausa de 0,5 s entre correos.

Envíos programados

Fecha y hora futuras con APScheduler. El asunto admite {nombre} para personalizarlo con el nombre de cada destinatario.

Diseños en .dms

Exporta el correo completo (asunto, cuerpo, pie e imágenes) a un fichero .dms propio para reutilizarlo o compartirlo.

Una web local con ventana propia

Por dentro es una aplicación Flask con cuatro blueprints (credenciales, contactos, editor y acerca de) y una capa de servicios. desktop.py arranca Flask en un hilo en local, espera a que responda y abre una ventana nativa con pywebview: WebView2 en Windows, WebKit en macOS y Qt WebEngine en Linux. También puede abrirse en el navegador con run.py.

PyInstaller empaqueta todo en Drago Mail Sender.exe o .app sin consola. Las credenciales SMTP se guardan en la carpeta de configuración de cada sistema, con la contraseña cifrada con Fernet y el fichero en permisos 600.

Cómo se construye cada correo

La parte difícil no es enviar, es que el correo llegue bien y se vea igual en todos los clientes. Cada mensaje sale como multipart/related con una parte alternative dentro: una versión en texto plano generada desde el HTML (un correo sin ella huele a spam) y la versión HTML.

Las imágenes subidas no dependen de ningún servidor: las que van en base64 se extraen, se adjuntan en línea y el HTML las referencia por cid:. En modo imagen se genera una plantilla de 600 px con un texto de vista previa oculto, color-scheme: light only y fondo #fffffe, un blanco que el modo oscuro de Gmail no invierte. Cada envío lleva su Message-ID, fecha y remitente con nombre visible.

El bug de «toca para descargar»

En iCloud y Apple Mail las imágenes llegaban como adjuntos que había que tocar para descargar, y Gmail las mostraba como «noname». Eran dos causas: la librería estándar de Python añade la cabecera MIME-Version a cada imagen, y Apple interpreta esas partes como piezas independientes; y las imágenes iban sin nombre de fichero. La solución fue borrar esa cabecera de las partes internas y darle a cada imagen un nombre y una disposición inline.

Límites conocidos

Los envíos programados viven en memoria: si cierras la app antes de la hora, no salen, y los fallos de un envío programado no se registran. Abre una conexión SMTP por destinatario; las listas grandes van despacio y mandan los límites de tu proveedor.

Historia del proyecto

La construí en dos sesiones, el 1 y el 7 de febrero de 2026. La primera dejó casi todo el núcleo: credenciales cifradas, contactos, editor con vista previa, imágenes por CID, envío con progreso y programación. La segunda fue de cómo se ve el correo al llegar: el constructor visual del pie, la plantilla de 600 px que resiste el modo oscuro, el arreglo de iCloud, la exportación a .dms, una página para importar diseños y la guía para compilar el .exe en Windows.

Tecnologías

[9]
  • Python 3.10+
  • Flask 3 + Jinja2
  • pywebview
  • PyQt6 + Qt WebEngine (Linux)
  • pandas + openpyxl
  • APScheduler
  • cryptography (Fernet)
  • smtplib
  • PyInstaller

Compatibilidad

versión 1.0 en todos

3/3 ✓
DispositivoEstado
Windows 10+ (con WebView2)Funciona
macOS 10.13+Funciona
Linux (con PyQt6)Funciona