Читать электронную почту и загружать вложения с сервера Microsoft Exchange
/questions/14709136/podklyuchitsya-k-pochtovomu-yaschiku-exchange-s-pomoschyu-python/14709151#14709151.... Я сослался на следующую ссылку, чтобы подключиться к 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='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)
Я использовал этот код в Windows. Помоги мне с Linux.
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?
exchangelib
зависит от различных сторонних пакетов, поэтому вы не можете просто скачать и импортировать пакет. Вам нужно установить его используя pip
чтобы установить эти пакеты автоматически:
$ pip install exchangelib