Чтение электронных писем и загрузка вложений с сервера Microsoft Exchange

connect-to-exchange-mailbox-with-python/3072491. ... Я использовал следующую ссылку для подключения к Exchange Online, загрузки вложений и чтения почты в Windows (с использованием Python и библиотеки exchangelib). Теперь я хочу выполнить ту же задачу в CentOS, но когда я вручную загружаю библиотеку exchangelib и устанавливаю ее. Всякий раз, когда я пытаюсь импортировать exchangelib, он выдает ошибку, например:

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

В чем может быть проблема?

Моя основная цель — читать электронные письма и загружать их. Адрес сервера imap/pop3 недоступен. Есть ли альтернатива exchangelib?

from exchangelib import DELEGATE, Account, Credentials

credentials = Credentials(
    username='MYWINDOMAIN\\myusername', 
    password='topsecret'
)
account = Account(
    primary_smtp_address='[email protected]', 
    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)

Я использовал этот код в Windows. Помогите мне с линуксом.


person Zayn malik    schedule 19.04.2017    source источник
comment
Почему это помечено Centos / Centos в заголовке? Кажется, это не зависит от CentOS.   -  person Martin Thoma    schedule 03.08.2017


Ответы (2)


Вот как вы читаете все электронные письма и сохраняете все вложения с помощью 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)

Связано: Как я могу отправить электронное письмо с вложением с помощью Python и Microsoft Exchange?

person Martin Thoma    schedule 01.08.2017

exchangelib зависит от различных сторонних пакетов, поэтому вы не можете просто загрузить и импортировать пакет. Вам нужно установить его, используя pip, чтобы эти пакеты устанавливались автоматически:

$ pip install exchangelib
person Erik Cederstrand    schedule 21.04.2017