Я настраиваю скрипт для чтения входящих писем из учетной записи 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? Возможно, какая-то причина, связанная с безопасностью, о которой я не знаю?