se termina la descarga de los adjuntos y solo se deja los mails con adjuntos pdf y xml
This commit is contained in:
1 parent
0855948192
commit
937c4d6260
4 files changed
+66
-29
No files matched your search
@@ -107,5 +107,4 @@ def delete_email_by_id(email_id):
|
||||
conn.close()
|
||||
|
||||
return rows_affected > 0
|
||||
|
||||
########################################################
|
||||
+33
-18
@@ -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):
|
||||
|
||||
@@ -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__":
|
||||
|
||||
Reference in new issue
Block a user