Python чтение электронной почты из учетной записи outlook с помощью imaplib / imapclient vs exchangelib? - PullRequest
0 голосов
/ 19 марта 2020

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

1 Ответ

0 голосов
/ 22 марта 2020

Я думаю, вам может понадобиться ввести полный электронный идентификатор при использовании imapclient / imaplib, а не просто имя пользователя при использовании exchangelib.

...