Correcciones documentales. Creado el proyecto envio-reportes-correo
This commit is contained in:
99
envio-reportes-correo/enviar-reporte.py
Normal file
99
envio-reportes-correo/enviar-reporte.py
Normal file
@@ -0,0 +1,99 @@
|
||||
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
|
||||
import glob
|
||||
from dotenv import load_dotenv # Importamos la función para cargar el .env
|
||||
|
||||
# Cargar las variables de entorno desde el archivo .env
|
||||
load_dotenv()
|
||||
|
||||
def enviar_correo_con_adjunto_reciente(
|
||||
servidor_smtp, puerto_smtp, usuario, contrasena,
|
||||
remitente, destinatario_principal, destinatario_cc,
|
||||
asunto, cuerpo_mensaje, carpeta_adjuntos
|
||||
):
|
||||
"""
|
||||
Busca el archivo más reciente en una carpeta y lo envía por correo.
|
||||
"""
|
||||
|
||||
# 1. Encontrar el archivo más reciente en la carpeta dada
|
||||
try:
|
||||
ruta_completa = os.path.abspath(carpeta_adjuntos)
|
||||
archivos = glob.glob(os.path.join(ruta_completa, '*'))
|
||||
if not archivos:
|
||||
print(f"No se encontraron archivos en la carpeta: {ruta_completa}")
|
||||
return
|
||||
|
||||
archivos.sort(key=os.path.getmtime, reverse=True)
|
||||
archivo_mas_reciente = archivos[0] # Tomamos el primer elemento (el más reciente)
|
||||
nombre_archivo = os.path.basename(archivo_mas_reciente)
|
||||
print(f"Archivo más reciente encontrado: {nombre_archivo}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error al buscar archivos en la carpeta: {e}")
|
||||
return
|
||||
|
||||
# 2. Crear el mensaje de correo
|
||||
msg = MIMEMultipart()
|
||||
msg['From'] = remitente
|
||||
msg['To'] = destinatario_principal
|
||||
msg['Cc'] = destinatario_cc
|
||||
msg['Subject'] = asunto
|
||||
|
||||
msg.attach(MIMEText(cuerpo_mensaje, 'plain'))
|
||||
|
||||
# 3. Adjuntar el archivo
|
||||
try:
|
||||
with open(archivo_mas_reciente, "rb") as attachment:
|
||||
parte = MIMEBase("application", "octet-stream")
|
||||
parte.set_payload(attachment.read())
|
||||
encoders.encode_base64(parte)
|
||||
parte.add_header(
|
||||
"Content-Disposition",
|
||||
f"attachment; filename={nombre_archivo}",
|
||||
)
|
||||
msg.attach(parte)
|
||||
except IOError as e:
|
||||
print(f"Error al adjuntar el archivo {archivo_mas_reciente}: {e}")
|
||||
return
|
||||
|
||||
# 4. Enviar el correo usando SMTP de Zimbra
|
||||
try:
|
||||
servidor = smtplib.SMTP(servidor_smtp, puerto_smtp)
|
||||
servidor.ehlo()
|
||||
servidor.starttls()
|
||||
servidor.ehlo()
|
||||
|
||||
servidor.login(usuario, contrasena)
|
||||
|
||||
destinatarios_totales = [destinatario_principal, destinatario_cc]
|
||||
servidor.sendmail(remitente, destinatarios_totales, msg.as_string())
|
||||
|
||||
servidor.quit()
|
||||
|
||||
print("Correo enviado exitosamente.")
|
||||
|
||||
except smtplib.SMTPException as e:
|
||||
print(f"Error al enviar el correo: {e}")
|
||||
except Exception as e:
|
||||
print(f"Ocurrió un error inesperado: {e}")
|
||||
|
||||
# --- INVOCACIÓN DE LA FUNCIÓN USANDO VARIABLES DE ENTORNO ---
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Obtenemos los valores del archivo .env usando os.getenv()
|
||||
enviar_correo_con_adjunto_reciente(
|
||||
servidor_smtp=os.getenv("SMTP_SERVER"),
|
||||
puerto_smtp=int(os.getenv("SMTP_PORT")), # Convertimos el puerto a entero
|
||||
usuario=os.getenv("USER"),
|
||||
contrasena=os.getenv("PASS"),
|
||||
remitente=os.getenv("REMITENTE"),
|
||||
destinatario_principal=os.getenv("DESTINATARIO_TO"),
|
||||
destinatario_cc=os.getenv("DESTINATARIO_CC"),
|
||||
asunto=os.getenv("ASUNTO_CORREO"),
|
||||
cuerpo_mensaje=os.getenv("CUERPO_CORREO"),
|
||||
carpeta_adjuntos=os.getenv("CARPETA_ADJUNTOS")
|
||||
)
|
||||
Reference in New Issue
Block a user