0

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 と exchangelib で接続できない理由はありますか? おそらく、私が気付いていないセキュリティ関連の理由でしょうか?

4

1 に答える 1