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()
|
conn.close()
|
||||||
|
|
||||||
return rows_affected > 0
|
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):
|
def descomprimir_adjuntos(emails, ruta):
|
||||||
"""
|
"""
|
||||||
Esta funcion recibe la lista de emails y por cada no recorre sus adjuntos
|
Busca adjuntos ZIP, los descomprime y agrega los archivos
|
||||||
si encuentra un adjunto .zip lo descomprime en la ruta especificada
|
extraídos a la lista de adjuntos del correo.
|
||||||
y actualiza la lista de archivos agregar estos nuevos documentos al lsitado de adjuntos del email
|
|
||||||
"""
|
"""
|
||||||
archivos_finales = []
|
|
||||||
for archivo in archivos:
|
try:
|
||||||
ruta_archivo = os.path.join(ruta, archivo)
|
for email in emails:
|
||||||
if archivo.lower().endswith('.zip') and os.path.exists(ruta_archivo):
|
nuevos_adjuntos = []
|
||||||
try:
|
for adjunto in list(email["adjuntos"]):
|
||||||
with zipfile.ZipFile(ruta_archivo, 'r') as zip_ref:
|
if not adjunto.lower().endswith(".zip"):
|
||||||
nombres_extraidos = zip_ref.namelist()
|
continue
|
||||||
zip_ref.extractall(ruta)
|
ruta_zip = os.path.join(ruta, adjunto)
|
||||||
archivos_finales.extend(nombres_extraidos)
|
if not os.path.exists(ruta_zip):
|
||||||
except Exception as e:
|
print(f"⚠️ No existe: {ruta_zip}")
|
||||||
print(f" ⚠️ Error descomprimiendo {archivo}: {e}")
|
continue
|
||||||
archivos_finales.append(archivo)
|
try:
|
||||||
else:
|
with zipfile.ZipFile(ruta_zip, "r") as zip_ref:
|
||||||
archivos_finales.append(archivo)
|
nombres_extraidos = [
|
||||||
return archivos_finales
|
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):
|
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):
|
def descargar_adjuntos_de_correos(outlook_token, emails, ruta_descarga):
|
||||||
try:
|
try:
|
||||||
|
emails_con_adjuntos = []
|
||||||
for email in emails:
|
for email in emails:
|
||||||
# Guardar lista original para el log
|
# Guardar lista original para el log
|
||||||
adjuntos = outlook_utilities.download_attachments(
|
adjuntos = outlook_utilities.download_attachments(
|
||||||
@@ -52,14 +52,30 @@ def descargar_adjuntos_de_correos(outlook_token, emails, ruta_descarga):
|
|||||||
ruta_descarga)
|
ruta_descarga)
|
||||||
if adjuntos:
|
if adjuntos:
|
||||||
email['adjuntos'] = adjuntos
|
email['adjuntos'] = adjuntos
|
||||||
|
emails_con_adjuntos.append(email)
|
||||||
|
|
||||||
return emails
|
return emails_con_adjuntos
|
||||||
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
print(f" ❌ Error procesando {email['id'][:10]}: {ex}")
|
print(f" ❌ Error procesando {email['id'][:10]}: {ex}")
|
||||||
|
|
||||||
return []
|
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():
|
def main():
|
||||||
|
|
||||||
@@ -83,26 +99,33 @@ def main():
|
|||||||
# se verifica si estos correos ya estan en la base de datos
|
# se verifica si estos correos ya estan en la base de datos
|
||||||
# si ya esta registrado, se quita del listado
|
# si ya esta registrado, se quita del listado
|
||||||
# si no esta se inserta en la base de datos
|
# si no esta se inserta en la base de datos
|
||||||
|
|
||||||
emails = email_utilities.quitar_correos_ya_registrados_en_base_de_datos(emails)
|
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
|
# si el correo tiene archivos zip, se descomprimen y se agregan a
|
||||||
# la lista de archivos adjuntos
|
# 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:
|
for e in emails:
|
||||||
print(f"\n📬 [{e['fecha']}] {e['subject'][:80]}...")
|
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__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
Reference in new issue
Block a user