Cómo automatizar envío de informes diarios por correo en Python
Indice
En muchas ocasiones, necesitamos enviar informes de manera constante y manualmente, lo que puede resultar tedioso. Automatizar esta tarea es una excelente forma de ahorrar tiempo y asegurar que los informes se envíen de forma puntual y sin errores. En este tutorial, aprenderás cómo automatizar el envío de informes diarios por correo electrónico utilizando Python.
Veremos cómo generar el informe, enviarlo por email, y programar su envío de manera automática cada día, utilizando herramientas integradas de los sistemas operativos. ¡Vamos a empezar!
Automatizar el envío de informes diarios por correo electrónico en Python
Automatizar el envío de informes diarios por correo electrónico en Python es un proceso que implica tres pasos principales:
- Crear el informe: Recopilar la información que deseas incluir en el informe (puede ser texto, un archivo PDF, CSV, etc.).
- Enviar el correo electrónico: Utilizar una librería de Python como
smtplib
para enviar el correo a través de un servidor SMTP. - Automatización diaria: Programar la ejecución del script de Python diariamente mediante herramientas del sistema operativo, como el Task Scheduler en Windows o cron en Linux/macOS.
1. Crear el informe (Paso Opcional)
Suponiendo que ya tienes los datos que deseas enviar como informe (por ejemplo, un archivo .txt
, .csv
o cualquier tipo de archivo), puedes prepararlo antes de enviarlo.
Ejemplo: Creación de un informe simple
# Generar un informe de ejemplo
reporte = "Informe diario: \n\n- Ventas: 1000 USD \n- Nuevos clientes: 15 \n- Visitas al sitio web: 2000"
# Guardar el informe en un archivo de texto
with open("informe_diario.txt", "w") as file:
file.write(reporte)
2. Enviar el correo electrónico
El siguiente script envía un correo electrónico utilizando smtplib
. Necesitas tener acceso a un servidor SMTP (como Gmail, Outlook, etc.).
Requisitos
- Una cuenta de correo electrónico (como Gmail).
- Para Gmail, necesitas habilitar el acceso a «Aplicaciones menos seguras» o utilizar OAuth2. En este caso, te enseño cómo usar el método más simple (aunque menos seguro).
Código para enviar el correo electrónico con adjuntos
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
import os
# Detalles del remitente y destinatario
from_address = "[email protected]"
to_address = "[email protected]"
password = "tu_contraseña"
# Crear el mensaje
msg = MIMEMultipart()
msg['From'] = from_address
msg['To'] = to_address
msg['Subject'] = "Informe Diario"
# Cuerpo del mensaje
body = "Adjunto encontrarás el informe diario."
msg.attach(MIMEText(body, 'plain'))
# Adjuntar el informe
filename = "informe_diario.txt"
attachment = open(filename, "rb")
# Codificar el archivo adjunto
part = MIMEBase('application', 'octet-stream')
part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', f"attachment; filename= {filename}")
# Añadir el archivo adjunto al mensaje
msg.attach(part)
# Cerrar el archivo adjunto
attachment.close()
# Conectar al servidor SMTP de Gmail y enviar el correo
try:
server = smtplib.SMTP('smtp.gmail.com', 587) # Conexión al servidor SMTP de Gmail
server.starttls() # Iniciar la conexión segura
server.login(from_address, password) # Iniciar sesión en el correo
text = msg.as_string() # Convertir el mensaje a texto
server.sendmail(from_address, to_address, text) # Enviar el correo
print("Correo enviado exitosamente.")
except Exception as e:
print(f"Error al enviar el correo: {e}")
finally:
server.quit() # Cerrar la conexión con el servidor SMTP
Explicación del código:
MIMEMultipart
: Permite enviar un correo con diferentes partes (texto, adjuntos).MIMEText
: Sirve para adjuntar el cuerpo del correo.MIMEBase
yencoders
: Permiten adjuntar archivos.- Servidor SMTP: Gmail usa el servidor
smtp.gmail.com
en el puerto 587.
3. Automatización Diaria
Una vez que el script esté listo, necesitas configurarlo para que se ejecute automáticamente todos los días.
En Windows (Usando Task Scheduler)
- Abre el Task Scheduler (Programador de Tareas).
- Selecciona Create Basic Task (Crear tarea básica).
- Dale un nombre y descripción a la tarea.
- Selecciona «Diario» como la frecuencia de la tarea.
- Elige la hora en la que deseas que se ejecute el script.
- Selecciona la opción «Start a Program» (Iniciar un programa).
- Navega al ejecutable de Python (por ejemplo,
C:\Python39\python.exe
). - En «Argumentos», ingresa la ruta completa de tu script Python. Por ejemplo:
C:\ruta_a_tu_script\enviar_informe.py
. - Finaliza la configuración.
En Linux/macOS (Usando cron)
- Abre el terminal.
- Ejecuta el siguiente comando para editar las tareas de cron:
crontab -e
- Añade la siguiente línea para ejecutar el script todos los días a una hora específica (por ejemplo, a las 9:00 AM):
0 9 * * * /usr/bin/python3 /ruta_completa_a_tu_script/enviar_informe.py
- Guarda y cierra el editor.
Con este proceso, puedes automatizar el envío de informes diarios. Este flujo te permite generar el informe, adjuntarlo y enviarlo por correo utilizando Python, y luego automatizar el proceso para que se ejecute a diario sin intervención manual. Asegúrate de personalizar los detalles como las credenciales de correo electrónico y las rutas a los archivos Python o informes según sea necesario.