#!/usr/bin/env python3 import imaplib import msal import pprint conf = { "authority": "https://login.microsoftonline.com/47f02128-acf0-47a7-a3bf-27a3619d4a4f", "client_id": "4fdf2634-a260-4576-a442-684998f0187b", #AppID "scope": ['https://outlook.office365.com/.default'], "secret": "dZD8Q~GmG_PFi.t_uRiyBEzwLeMZeemQGHUFta~J", #Key-Value "secret-id": "5cae3249-0fc0-43e2-bc0e-d78f41964970", #Key-ID } def generate_auth_string(user, token): return f"user={user}\x01auth=Bearer {token}\x01\x01" if __name__ == "__main__": app = msal.ConfidentialClientApplication(conf['client_id'], authority=conf['authority'], client_credential=conf['secret']) result = app.acquire_token_silent(conf['scope'], account=None) if not result: print("No suitable token in cache. Get new one.") result = app.acquire_token_for_client(scopes=conf['scope']) if "access_token" in result: print(result['token_type']) pprint.pprint(result) else: print(result.get("error")) print(result.get("error_description")) print(result.get("correlation_id")) imap = imaplib.IMAP4('outlook.office365.com') imap.starttls() imap.authenticate("XOAUTH2", lambda x: generate_auth_string("polynet-dumas@entreprise-dumas.com", result['access_token']).encode("utf-8")) # Print list of mailboxes on server code, mailboxes = imap.list() for mailbox in mailboxes: print(mailbox.decode("utf-8")) # Select mailbox imap.select("INBOX") # Cleanup imap.close()