se termina la descarga de los adjuntos y solo se deja los mails con adjuntos pdf y xml

This commit is contained in:
George committed 2026-06-01 18:05:44 -05:00
1 parent 0855948192
commit 937c4d6260
4 files changed
+66 -29

No files matched your search

-1
View File
@@ -107,5 +107,4 @@ def delete_email_by_id(email_id):
conn.close()
return rows_affected > 0
########################################################
+33 -18
View File
@@ -28,25 +28,40 @@ def quitar_correos_ya_registrados_en_base_de_datos(emails):
########################################################
def descomprimir_adjuntos(emails, ruta):
"""
Esta funcion recibe la lista de emails y por cada no recorre sus adjuntos
si encuentra un adjunto .zip lo descomprime en la ruta especificada
y actualiza la lista de archivos agregar estos nuevos documentos al lsitado de adjuntos del email
Busca adjuntos ZIP, los descomprime y agrega los archivos
extraídos a la lista de adjuntos del correo.
"""
archivos_finales = []
for archivo in archivos:
ruta_archivo = os.path.join(ruta, archivo)
if archivo.lower().endswith('.zip') and os.path.exists(ruta_archivo):
try:
with zipfile.ZipFile(ruta_archivo, 'r') as zip_ref:
nombres_extraidos = zip_ref.namelist()
zip_ref.extractall(ruta)
archivos_finales.extend(nombres_extraidos)
except Exception as e:
print(f" ⚠️ Error descomprimiendo {archivo}: {e}")
archivos_finales.append(archivo)
else:
archivos_finales.append(archivo)
return archivos_finales
try:
for email in emails:
nuevos_adjuntos = []
for adjunto in list(email["adjuntos"]):
if not adjunto.lower().endswith(".zip"):
continue
ruta_zip = os.path.join(ruta, adjunto)
if not os.path.exists(ruta_zip):
print(f"⚠️ No existe: {ruta_zip}")
continue
try:
with zipfile.ZipFile(ruta_zip, "r") as zip_ref:
nombres_extraidos = [
nombre
for nombre in zip_ref.namelist()
if not nombre.endswith("/")
]
zip_ref.extractall(ruta)
nuevos_adjuntos.extend(nombres_extraidos)
print(
f"📦 {adjunto}: {len(nombres_extraidos)} archivos extraídos"
)
except Exception as e:
print(f"⚠️ Error descomprimiendo {adjunto}: {e}")
email["adjuntos"].extend(nuevos_adjuntos)
return emails
except Exception as ex:
print(f"❌ Error general: {ex}")
return emails
########################################################
def filtrar_archivos_validos(archivos):
BIN
View File
Binary file not shown.
+33 -10
View File
@@ -42,7 +42,7 @@ def descargar_correos(outlook_token, fecha_inicio, fecha_fin):
########################################################
def descargar_adjuntos_de_correos(outlook_token, emails, ruta_descarga):
try:
emails_con_adjuntos = []
for email in emails:
# Guardar lista original para el log
adjuntos = outlook_utilities.download_attachments(
@@ -52,14 +52,30 @@ def descargar_adjuntos_de_correos(outlook_token, emails, ruta_descarga):
ruta_descarga)
if adjuntos:
email['adjuntos'] = adjuntos
emails_con_adjuntos.append(email)
return emails
return emails_con_adjuntos
except Exception as ex:
print(f" ❌ Error procesando {email['id'][:10]}: {ex}")
return []
########################################################
def dejar_mail_si_tiene_adjunto_pdf_o_xml(emails):
"""
Recorre los adjuntos de cada email y elimina los que no tengan extensión pdf o xml
actualiza la lista de adjuntos del correo
si el mail no tiene pdf ni xml también se elimina
"""
emails_con_pdf_o_xml = []
for email in emails:
adjuntos_validos = [adjunto for adjunto in email['adjuntos'] if adjunto.lower().endswith(('.pdf', '.xml'))]
if adjuntos_validos:
email['adjuntos'] = adjuntos_validos
emails_con_pdf_o_xml.append(email)
return emails_con_pdf_o_xml
########################################################
def main():
@@ -83,26 +99,33 @@ def main():
# se verifica si estos correos ya estan en la base de datos
# si ya esta registrado, se quita del listado
# si no esta se inserta en la base de datos
emails = email_utilities.quitar_correos_ya_registrados_en_base_de_datos(emails)
# descargar todos los adjuntos de cada mail
# descargar adjuntos de cada correo y agregar
emails = descargar_adjuntos_de_correos(outlook_token, emails, CONFIG.client.ruta_descarga)
# with open("correos_con_adjuntos.json", "w", encoding="utf-8") as f:
# json.dump(emails, f, ensure_ascii=False, indent=4)
# si el correo tiene archivos zip, se descomprimen y se agregan a
# la lista de archivos adjuntos
emails = email_utilities.descomprimir_adjuntos(emails, CONFIG.client.ruta_descarga)
# se eliminan mails que no tengan adjunto pdf o xml
# también se eliminar los adjuntos no que sean xml y pdf
emails = dejar_mail_si_tiene_adjunto_pdf_o_xml(emails)
# se evalua los adjuntos del correo:
# 1. se quita de la lista el correo si no tiene adjunto
# 2. se quita de la lista el correo si no tiene
for e in emails:
print(f"\n📬 [{e['fecha']}] {e['subject'][:80]}...")
archivos_adjuntos = descargar_adjunto_de_correo(outlook_token, e['id'], CONFIG.client.ruta_descarga)
#adjuntos originales
print(f" ├── 📂 Adjuntos originales:")
for idx, a in enumerate(e['adjuntos']):
prefijo = " │ └── " if idx == len(e['adjuntos'])-1 else " │ ├── "
print(f"{prefijo}{a}")
########################################################
if __name__ == "__main__":