En un artículo anterior vimos cómo enviar correos desde PowerShell utilizando Brevo, una plataforma de comunicación que permite enviar correos electrónicos, SMS y mensajes de WhatsApp desde aplicaciones y scripts. Esta solución es especialmente útil para automatizar notificaciones en procesos automáticos, logs y tareas de mantenimiento.
En este tutorial abordaremos el mismo objetivo, pero utilizando Python, uno de los lenguajes más populares en el ámbito del scripting, la automatización y el desarrollo backend. Aprenderás cómo enviar correos electrónicos desde tus scripts de Python utilizando el servidor SMTP de Brevo, lo que te permitirá implementar notificaciones automáticas en casos como:
- Procesamiento de datos o flujos ETL.
- Tareas programadas (cron jobs).
- Alertas sobre el estado de servidores o servicios.
- Resultados de pruebas automatizadas o despliegues.
Al finalizar, contarás con un script funcional que podrás integrar fácilmente en tus proyectos, independientemente del sistema operativo o entorno de ejecución.
Tabla de contenidos
- 1 ¿Por qué enviar correos desde Python?
- 2 ¿Qué es Brevo y cómo registrarse?
- 3 Cómo enviar correos desde Python con Brevo
- 4 Cómo adjuntar el archivo completo al correo
- 5 Cómo añadir múltiples destinatarios
- 6 Buenas prácticas y recomendaciones
- 7 Conclusiones
- 8 Apéndice: Código completo para enviar correos desde Python con Brevo
¿Por qué enviar correos desde Python?
Aunque PowerShell es una excelente herramienta en entornos Windows, Python es multiplataforma y se utiliza ampliamente en sistemas Linux, macOS y entornos en la nube. Automatizar el envío de correos desde Python ofrece muchas ventajas:
- Funciona en prácticamente cualquier sistema operativo.
- Existen múltiples bibliotecas que facilitan el envío de correos (como
smtplib,emailyssl). - Es ideal para desarrolladores que ya usan Python como parte de sus flujos de trabajo.
- Permite gran flexibilidad en el contenido del mensaje: adjuntos, formato HTML, procesamiento de datos antes del envío, etc.
¿Qué es Brevo y cómo registrarse?
Para quienes no la conocen, Brevo (anteriormente Sendinblue) es una plataforma de comunicación todo en uno que permite enviar correos transaccionales y campañas de marketing, así como mensajes SMS y de WhatsApp, mediante API o SMTP.
Entre sus ventajas más destacadas:
- Plan gratuito que permite enviar hasta 300 correos electrónicos diarios.
- Interfaz web intuitiva y fácil de usar.
- Compatibilidad con SMTP y API RESTful.
- Alta tasa de entregabilidad, lo que garantiza que tus correos lleguen a destino.

Cómo crear una cuenta en Brevo
Si aún no tienes cuenta, el proceso es rápido y gratuito. Estos son los pasos:
- Visita https://www.brevo.com
- Regístrate con tu correo electrónico y completa los datos básicos que solicita la plataforma.
- Confirma tu cuenta haciendo clic en el enlace que recibirás por correo.
- Ingresa al panel de control y accede a la sección SMTP & API.
- Si aún no lo hiciste, genera una contraseña SMTP (es distinta de la contraseña de acceso).
- Copia los siguientes datos, que necesitarás más adelante en tu script de Python:
- Servidor SMTP:
smtp-relay.brevo.com - Puerto:
587 - Usuario SMTP: tu dirección de correo registrada
- Contraseña SMTP: la que generaste en el paso anterior
- Servidor SMTP:
Claro, aquí tienes una versión mejorada de tu texto con una redacción más fluida, natural y profesional. He hecho correcciones de estilo, ortografía, coherencia gramatical y algunas sugerencias para mejorar la comprensión y el ritmo de lectura:
Cómo enviar correos desde Python con Brevo
En esta sección veremos paso a paso cómo escribir un script en Python para enviar correos electrónicos utilizando Brevo. Lo haremos usando únicamente la biblioteca estándar de Python (smtplib y email), por lo que no necesitarás instalar ningún paquete adicional ni depender de librerías externas.
Este enfoque es ideal si buscas una solución simple, portátil y fácil de integrar en scripts.
El script paso a paso
Primero, importa los módulos necesarios:
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart import argparse import os
Estos módulos cumplen son necesarios para realizar las siguientes funciones:
smtplib: se encarga de conectar con el servidor SMTP y enviar el correo.email.mime: permite construir mensajes con cuerpo de texto, HTML y adjuntos.argparse: sirve para recibir la ruta al archivo de log como argumento desde la línea de comandos.os: permite comprobar si el archivo existe antes de intentar leerlo.
Recibir el archivo como parámetro
Agrega este bloque para que el script reciba como parámetro la ruta a un archivo que se desea enviar, por ejemplo, un archivo de log:
parser = argparse.ArgumentParser(description="Envía un log por correo usando Brevo")
parser.add_argument("logfile", help="Ruta al archivo de log")
args = parser.parse_args()Configuración del servidor SMTP
A continuación, define los parámetros necesarios para conectarse al servidor de Brevo y enviar el correo. Recuerda sustituir los datos por los de tu cuenta real.
# Configuración SMTP smtp_server = "smtp-relay.brevo.com" smtp_port = 587 smtp_user = "[email protected]" smtp_password = "tu_contraseña_smtp" from_email = "[email protected]" to_email = "[email protected]" subject = "Informe automático de log"
Leer el contenido del archivo
En este ejemplo, incluiremos en el correo solo las últimas 30 líneas del archivo, lo que es útil para evitar saturar el mensaje si el archivo es muy largo.
# Leer el log (últimas 30 líneas)
if os.path.isfile(args.logfile):
with open(args.logfile, "r", encoding="utf-8") as file:
lines = file.readlines()
body_text = ''.join(lines[-30:])
else:
body_text = f"No se encontró el archivo {args.logfile}"Construir el mensaje del correo
Ahora construimos el mensaje y le agregamos el cuerpo como texto plano. Si más adelante quieres enviar contenido en HTML, simplemente cambia "plain" por "html":
# Construcción del mensaje msg = MIMEMultipart() msg["From"] = from_email msg["To"] = to_email msg["Subject"] = subject body = MIMEText(body_text, "plain", "utf-8") msg.attach(body)
Enviar el correo
Finalmente, el correo se envía mediante una conexión SMTP segura usando TLS. El bloque try/except permite capturar errores comunes, como problemas de red o credenciales incorrectas.
# Enviar correo
try:
with smtplib.SMTP(smtp_server, smtp_port) as server:
server.starttls() # Activa TLS para cifrar la conexión
server.login(smtp_user, smtp_password)
server.sendmail(from_email, to_email, msg.as_string())
print("Correo enviado correctamente.")
except Exception as e:
print(f"Error al enviar el correo: {e}")Cómo usar el script
Guarda el código anterior en un archivo llamado enviar_log.py y ejecútalo desde la terminal así:

python enviar_log.py /ruta/al/log.txt
Cómo adjuntar el archivo completo al correo
Si prefieres enviar el archivo completo0 como archivo adjunto, puedes hacerlo fácilmente con una pequeña modificación en el script.
En primer lugar, agrega esta línea al principio del archivo para importar MIMEApplication
from email.mime.application import MIMEApplication
Después de agregar el cuerpo del correo (msg.attach(body)), incluye el siguiente bloque:
if os.path.isfile(args.logfile):
with open(args.logfile, "rb") as file:
part = MIMEApplication(file.read(), Name=os.path.basename(args.logfile))
part['Content-Disposition'] = f'attachment; filename="{os.path.basename(args.logfile)}"'
msg.attach(part)Esto enviará el archivo completo como adjunto. Puedes mantener un resumen en el cuerpo del correo o simplemente escribir un mensaje como:
body = MIMEText("Se adjunta el archivo de log solicitado.", "plain", "utf-8")Cómo añadir múltiples destinatarios
Para enviar un correo a varios destinatarios, puedes hacerlo incluyendo todos los correos en una lista:
to_emails = ["[email protected]", "[email protected]"] msg["To"] = ", ".join(to_emails) server.sendmail(from_email, to_emails, msg.as_string())
Buenas prácticas y recomendaciones
Ten en cuenta las siguientes sugerencias para que tu solución sea más segura, robusta y mantenible:
- Evita contraseñas en texto plano. Usa variables de entorno o carga las credenciales desde un archivo
.envcon python-dotenv. - Adjunta el archvio completo si es muy extenso, en lugar de saturar el cuerpo del mensaje.
- Valida el contenido del archivo antes de enviarlo: asegúrate de que existe y contiene información útil.
- Usa HTML si necesitas un formato más visual (tablas, colores, enlaces).
- Controla el límite diario de envíos. El plan gratuito de Brevo permite hasta 300 correos al día, suficiente para la mayoría de tareas programadas o notificaciones de mantenimiento.
Conclusiones
Enviar correos desde Python utilizando Brevo es una solución práctica, potente y fácil de implementar. Gracias al soporte del protocolo SMTP y al uso de la biblioteca estándar, puedes automatizar el envío de notificaciones y alertas en casi cualquier entorno, sin necesidad de instalar librerías adicionales.
Esta solución es válida tanto para Windows como para Linux, y se adapta perfectamente a tareas programadas, scripts de mantenimiento o sistemas de monitoreo. Además, si ya has implementado algo similar en PowerShell, este enfoque en Python te permitirá extender la funcionalidad a entornos donde Python sea el lenguaje predominante.
¿Quieres ir más allá? Algunas ideas para escalar esta solución:
- Programarlo con
crono el Programador de tareas de Windows. - Integrarlo en pipelines de CI/CD para enviar resultados de pruebas o despliegues.
- Convertirlo en una microservicio usando FastAPI, lo que te permitirá enviar correos desde cualquier aplicación, servicio o interfaz web, con validación automática y alto rendimiento.
En definitiva, combinar Python con Brevo es una forma ligera, segura y multiplataforma de mantenerte informado sobre procesos críticos de forma automatizada.
Apéndice: Código completo para enviar correos desde Python con Brevo
Este código puede ser fácilmente adaptado para usarse dentro de cron jobs, scripts de monitoreo o pipelines de automatización.
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import argparse
import os
# Argumentos desde línea de comandos
parser = argparse.ArgumentParser(description="Envía un log por correo usando Brevo")
parser.add_argument("logfile", help="Ruta al archivo de log")
args = parser.parse_args()
# Configuración SMTP
smtp_server = "smtp-relay.brevo.com"
smtp_port = 587
smtp_user = "[email protected]" # Cambia por tu usuario SMTP de Brevo
smtp_password = "tu_contraseña_smtp" # Cambia por tu contraseña SMTP
from_email = "[email protected]"
to_email = "[email protected]"
subject = "Informe automático de log"
# Leer el log (últimas 30 líneas)
if os.path.isfile(args.logfile):
with open(args.logfile, "r", encoding="utf-8") as file:
lines = file.readlines()
body_text = ''.join(lines[-30:])
else:
body_text = f"No se encontró el archivo {args.logfile}"
# Construcción del mensaje
msg = MIMEMultipart()
msg["From"] = from_email
msg["To"] = to_email
msg["Subject"] = subject
body = MIMEText(body_text, "plain", "utf-8")
msg.attach(body)
# Enviar correo
try:
with smtplib.SMTP(smtp_server, smtp_port) as server:
server.starttls()
server.login(smtp_user, smtp_password)
server.sendmail(from_email, to_email, msg.as_string())
print("Correo enviado correctamente.")
except Exception as e:
print(f"Error al enviar el correo: {e}")Nota: La imagen de este artículo fue generada utilizando un modelo de inteligencia artificial.

Deja una respuesta