2017-04-19 132 views
0

connect-to-exchange-mailbox-with-python/3072491 ....我已经推荐以下链接连接到Exchange Online并下载附件并在Windows上阅读邮件(使用Python和exchangelib库)。现在我想在CentOS上完成相同的任务,但是当我手动下载exchangelib库并安装它时。 每当我试图导入exchangelib,它会引发如下错误:从Microsoft Exchange Server读取电子邮件并下载附件

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中使用了这段代码。用Linux帮助我。

+0

为什么这标题与标题中的centos/centos?它似乎不是具体的centos。 –

回答

0

exchangelib依赖于各种第三方包,所以你不能只是下载和导入包。你需要使用pip获得这些软件包自动安装到安装:

$ pip install exchangelib 
0

这是你如何阅读所有电子邮件和存储所有附件的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) 

相关:How can I send an email with an attachment with Python and Microsoft Exchange?

相关问题