Python читает электронную почту из учетной записи Outlook, используя imaplib/imapclient vs exchangelib?

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


person alex    schedule 18.03.2020    source источник
comment
exchangelib может поддерживать OAuth. Ваш администратор мог установить разные параметры безопасности для EWS (используется exchangelib) и IMAP (используется imaplib). Пробовали ли вы использовать пароль для конкретного приложения или аналогичный, или использовать библиотеки ADAL и зарегистрироваться для доступа OAuth?   -  person Max    schedule 19.03.2020
comment
Нет, я не пробовал пароль для конкретного приложения или библиотеки ADAL. Спасибо за кивок - я посмотрю EWS между IMAP. Может быть, я могу связаться с администратором и получить некоторую информацию.   -  person alex    schedule 19.03.2020


Ответы (1)


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

person gandhiv    schedule 22.03.2020
comment
Спасибо за ваш комментарий, я обязательно его передам. Просто имел в виду, что username является сокращением от [email protected] - person alex; 22.03.2020
comment
Ох, ладно! Мне все еще трудно представить, что проблема связана с ограничениями администратора, хотя это вполне возможно. Используя imaplib, это работает для меня: from imaplib import IMAP4_SSL box = IMAP4_SSL('outlook.office365.com', 993) box.login(emailID, emailPassword) Я бы сказал, что вам нужно передать порт Outlook imap, но это дало бы вам другую ошибку. Удачи! - person gandhiv; 22.03.2020