Subcarpeta de win32com Outlook no siempre encontrada.
Tengo un script que mueve/guarda/clasifica correos electrónicos en un buzón compartido. Y me encuentro con errores cuando a veces no se encuentran las carpetas de correo. Estoy utilizando la siguiente función para recuperar las carpetas de correo. Y a veces funciona y otras veces no. Normalmente tengo que reiniciar Outlook para que funcione una vez que se ha producido el error. A veces no logra encontrar las subcarpetas dentro de la bandeja de entrada y devuelve que está vacía.
¿Hay alguna manera de asegurarse de que siempre se encuentren las subcarpetas?
OUTLOOK = win32com.client.GetActiveObject('Outlook.Application') #Esto es cómo trabajo con Outlook
Mapi - carpetas
['x', 'y', 'z']
x - carpetas
['PersonMetadata', 'Yammer Root', 'Tasks', 'Sent Items', 'Outbox', 'Notes', 'Junk Email', 'Journal', 'Inbox', 'Files', 'ExternalContacts', 'Drafts', 'Deleted Items', 'Conversation History', 'Conversation Action Settings', 'Contacts', 'Calendar', 'Archive']
Bandeja de entrada - carpetas
['a', 'b', 'c'] #ESTO A VECES ESTÁ VACÍO
FOLDERS = {"example": ["x", "Inbox", "a"]}
def obtener_carpeta(instancia_outlook, *carpetas):
carpeta_objetivo = instancia_outlook
try:
for carpeta in carpetas:
print(carpeta_path)
print([f.Name for f in carpeta_objetivo.Folders])
carpeta_objetivo = carpeta_objetivo.Folders[str(carpeta)]
except Exception:
raise ValueError("".join(f".Folders[{carpeta}]" for carpeta in carpetas))
return carpeta_objetivo
def obtener_carpeta_outlook(carpeta, outlook):
mapi = outlook.GetNamespace("MAPI")
return obtener_carpeta(mapi, *FOLDERS.get(carpeta))
Encontré esto en otra publicación que creo que se relaciona con mi problema, pero realmente no entiendo lo que está diciendo en stackoverflow.com/a/40853098/10833061
davy.ai
Parece que el problema que estás enfrentando está relacionado con las subcarpetas dentro de la carpeta “Inbox”, las cuales no siempre se encuentran y a veces devuelven una lista vacía. Una posible solución para asegurarte de que siempre se encuentren las subcarpetas es utilizar el método “GetDefaultFolder” en lugar de acceder directamente a la carpeta “Inbox”. Este método recupera la carpeta predeterminada para el tipo de carpeta especificado para el usuario actual.
Puedes modificar tu función “get_outlook_folder” de la siguiente manera:
Con esta modificación, en lugar de acceder directamente a la carpeta “Inbox” y sus subcarpetas, recuperas la carpeta predeterminada “Inbox” utilizando el método “GetDefaultFolder” y luego la pasas a tu función “get_folder” para recuperar la subcarpeta deseada.
Utilizando este enfoque, deberías poder encontrar consistentemente las subcarpetas, incluso si la carpeta “Inbox” está vacía en ocasiones.