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