Correcciones documentales. Creado el proyecto envio-reportes-correo

This commit is contained in:
2025-12-16 11:13:04 -05:00
parent cd70a1d73b
commit ec82740ed9
7 changed files with 270 additions and 1 deletions

View File

@@ -0,0 +1,15 @@
# Configuraciones de Zimbra SMTP
SMTP_SERVER=mail.tudominio.com
SMTP_PORT=587
USER=tu.usuario@tudominio.com
PASS=TuContrasenaSegura
# Configuraciones del Correo
REMITENTE=tu.usuario@tudominio.com
DESTINATARIO_TO=destinatario@ejemplo.com
DESTINATARIO_CC=copia@ejemplo.com
ASUNTO_CORREO="Informe Automático - Archivo Reciente"
CUERPO_CORREO="Hola, Adjunto reporte automatico generado"
# Ruta a la carpeta de adjuntos (usa barras diagonales /)
CARPETA_ADJUNTOS=./mis_informes

View File

@@ -0,0 +1,30 @@
# Envio de Reportes
Un Script rápido para enviar el archivo mas reciente de un directorio, a una direccion de correo electronica y con copia a otra direccion.
Este script es para automatizacion y no cuenta con interfaz grafica.
# Reglas
- Dados los datos del achivo ```.env``` se elije el archivo mas reciente del directorio configurado y se envia a las direcciones configuradas.
# Modo de uso
- Ejecutar con python 3.x
- Instalar los siguientes modulos:
- smtplib
- dotenv
- renombrar o copiar el archivo [.env.example](.env.example) a ```.env```
- Llenar los datos necesarios en el archivo ```.env```
# Detalles
|||
|---|---|
|**Autor**|drk0027|
|**Fecha Creacion**|16-12-2025|
|**tags**|automatizaciones, correo-electronico|
# Observaciones
¿Funciona? si. Pero no lo pude aprovechar por restricciones que desconocía a la hora de escribir este codigo.

View 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")
)