我正在设置一个脚本来读取来自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?也许是一些我不知道的与安全相关的原因?