Leer correos electrónicos y descargar archivos adjuntos de Microsoft Exchange Server

connect-to-exchange-mail-with-python / 3072491 …. He revisado el siguiente enlace para conectarme a Exchange Online y descargar archivos adjuntos y leer correos en Windows (usando Python y la biblioteca exchangelib). Ahora quiero realizar la misma tarea en CentOS, pero cuando descargo manualmente la biblioteca exchangelib y la instalo. Cada vez que bash importar exchangeangelib, se produce un error como:

 Traceback (most recent call last): File "", line 1, in  File "exchangelib/__init__.py", line 2, in  from .account import Account # noqa File "exchangelib/account.py", line 8, in  from cached_property import threaded_cached_property ImportError: No module named cached_property 

¿Cuál podría ser el problema?

Mi principal objective es leer correos electrónicos y descargarlos. No hay una dirección de imap / pop3 servidor disponible. ¿Hay alguna alternativa al exchangelib ?

 from exchangelib import DELEGATE, Account, Credentials credentials = Credentials( username='MYWINDOMAIN\\myusername', password='topsecret' ) account = Account( primary_smtp_address='john@example.com', credentials=credentials, autodiscover=True, access_type=DELEGATE ) # Print first 100 inbox messages in reverse order for item in account.inbox.all().order_by('-datetime_received')[:100]: print(item.subject, item.body, item.attachments) 

He utilizado este código en Windows. Ayúdame con Linux.

Así es como lee todos los correos electrónicos y almacena todos los archivos adjuntos con exchangelib :

 from exchangelib import ServiceAccount, Configuration, Account, DELEGATE import os from config import cfg credentials = ServiceAccount(username=cfg['imap_user'], password=cfg['imap_password']) config = Configuration(server=cfg['imap_server'], credentials=credentials) account = Account(primary_smtp_address=cfg['smtp_address'], config=config, autodiscover=False, access_type=DELEGATE) unread = account.inbox.filter() # returns all mails for msg in unread: print(msg) print("attachments ={}".format(msg.attachments)) print("conversation_id ={}".format(msg.conversation_id)) print("last_modified_time={}".format(msg.last_modified_time)) print("datetime_sent ={}".format(msg.datetime_sent)) print("sender ={}".format(msg.sender)) print("text_body={}".format(msg.text_body.encode('UTF-8'))) print("#" * 80) for attachment in msg.attachments: fpath = os.path.join(cfg['download_folder'], attachment.name) with open(fpath, 'wb') as f: f.write(attachment.content) 

Relacionado: ¿Cómo puedo enviar un correo electrónico con un archivo adjunto con Python y Microsoft Exchange?

exchangelib depende de varios paquetes de terceros, por lo que no puede simplemente descargar e importar el paquete. Debe instalarlo usando pip para que estos paquetes se instalen automáticamente:

 $ pip install exchangelib