Python使用imaplib / imapclient与exchangelib从Outlook帐户读取电子邮件吗?

问题描述 投票:0回答:1

我正在设置一个脚本来读取来自Outlook.com帐户的传入电子邮件,并且我已经使用imaplib测试了几种方法,但均未成功。但是,当我尝试使用Exchangelib时,我能够做到这一点。我不能完全确定为什么Exchangelib可以工作而imaplib不能。我觉得我可能正在打破一些最佳实践,因为我不知道Exchangelib如何通过某种网络连接的诡计连接到邮箱?

作为参考,无效的IMAP代码(尽管当我尝试连接到我的个人gmail帐户时,它可以工作)

from imapclient import IMAPClient
import mailparser

with IMAPClient('outlook.office365.com', ssl=True) as server:
    server.login("username", "password")
    server.select_folder('INBOX')
    messages = server.search(['FROM', ])

    # for each unseen email in the inbox
    for uid, message_data in server.fetch(messages, 'RFC822').items():
        email_message = mailparser.parse_from_string(message_data[b'RFC822'])
        print("email ", email_message)

我收到以下错误

imapclient.exceptions.LoginError: b'LOGIN failed.'

当我使用exchangelib时,它可以成功工作。参考代码如下:

from exchangelib import Credentials, Account

credentials = Credentials("username", "password")
account = Account(username, credentials=credentials, autodiscover=True)

for item in account.inbox.all().order_by('-datetime_received')[:100]:
    print(item.subject, item.sender, item.datetime_received)

我有什么原因无法与imaplib / imapclient vs exchangelib连接?也许是我不知道的一些与安全性相关的原因?

python imaplib exchangelib imapclient
1个回答
0
投票

我认为使用imapclient / imaplib时可能需要传递完整的电子邮件ID,而使用exchangelib时则仅需要传递用户名。

© www.soinside.com 2019 - 2024. All rights reserved.