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