import requests def get_access_token(refresh_token: str, client_id: str) -> str: res = requests.post( "https://login.microsoftonline.com/common/oauth2/v2.0/token", data={ "client_id": client_id, "grant_type": "refresh_token", "refresh_token": refresh_token, "scope": "https://graph.microsoft.com/.default" } ) res.raise_for_status() return res.json()["access_token"] def get_mail_folders(access_token: str): res = requests.get( "https://graph.microsoft.com/v1.0/me/mailFolders", headers={"Authorization": f"Bearer {access_token}"}, ) res.raise_for_status() return res.json().get("value", []) def get_messages_from_folder(access_token: str, folder_id: str): messages = [] url = f"https://graph.microsoft.com/v1.0/me/mailFolders/{folder_id}/messages" while url: res = requests.get(url, headers={"Authorization": f"Bearer {access_token}"}) res.raise_for_status() data = res.json() messages.extend(data.get("value", [])) url = data.get("@odata.nextLink") return messages def print_sorted_messages(access_token: str): folders = get_mail_folders(access_token) all_messages = [] for folder in folders: msgs = get_messages_from_folder(access_token, folder['id']) all_messages.extend(msgs) all_messages.sort(key=lambda m: m.get('receivedDateTime', ''), reverse=True) for m in all_messages: print(f"Subject: {m.get('subject')}") print(f"From: {m.get('from', {}).get('emailAddress', {}).get('address')}") print(f"Received: {m.get('receivedDateTime')}") print(f"Text: {m.get('bodyPreview')}") print(f'\n{"-" * 50}\n') refresh_token = "YOUR_REFRESH_TOKEN" client_id = "YOUR_CLIENT_ID" access_token = get_access_token(refresh_token, client_id) print_sorted_messages(access_token)