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:
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
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:
smtplib, email y ssl).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:
Si aún no tienes cuenta, el proceso es rápido y gratuito. Estos son los pasos:
smtp-relay.brevo.com587Claro, 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:
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.
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.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() 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 = "tu_usuario@ejemplo.com" smtp_password = "tu_contraseña_smtp" from_email = "tu_usuario@ejemplo.com" to_email = "destinatario@ejemplo.com" subject = "Informe automático de log"
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}" 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)
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}") 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
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") Para enviar un correo a varios destinatarios, puedes hacerlo incluyendo todos los correos en una lista:
to_emails = ["user1@ejemplo.com", "user2@ejemplo.com"] msg["To"] = ", ".join(to_emails) server.sendmail(from_email, to_emails, msg.as_string())
Ten en cuenta las siguientes sugerencias para que tu solución sea más segura, robusta y mantenible:
.env con python-dotenv.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:
cron o el Programador de tareas de Windows.En definitiva, combinar Python con Brevo es una forma ligera, segura y multiplataforma de mantenerte informado sobre procesos críticos de forma automatizada.
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 = "tu_usuario@ejemplo.com" # Cambia por tu usuario SMTP de Brevo
smtp_password = "tu_contraseña_smtp" # Cambia por tu contraseña SMTP
from_email = "tu_usuario@ejemplo.com"
to_email = "destinatario@ejemplo.com"
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.
El volumen de datos que las organizaciones generan y deben manejar crece día a día:…
Cuando escuchamos la palabra “azar”, pensamos en lo impredecible: una moneda que gira en el…
Una nueva vulnerabilidad crítica ha sido detectada en MLflow, la popular plataforma de código abierto…
En estadística, los valores atípicos —también llamados outliers— son esos datos que se alejan “demasiado”…
Vivimos en un mundo cada vez más digital, donde gestionamos decenas (o incluso cientos) de…
Aunque Python y JavaScript son lenguajes muy distintos en su propósito y ecosistema, no es…
This website uses cookies.