import base64 import poplib import requests def get_access_token(client_id,refresh_token): data = { 'client_id': client_id, 'grant_type': 'refresh_token', 'refresh_token': refresh_token } ret = requests.post('https://login.live.com/oauth20_token.srf', data=data) # Print the response text and access token print(ret.text) print(ret.json()['access_token']) return ret.json()['access_token'] # Generate OAuth2 authentication string using the access token def generate_auth_string(user, token): auth_string = f"user={user}\1auth=Bearer {token}\1\1" return auth_string pop3_server = 'outlook.office365.com' pop3_port = 995 # POP3 over SSL def connect_pop3(email, access_token): server = poplib.POP3_SSL(pop3_server, pop3_port) # Use OAuth2 authentication auth_string = generate_auth_string(email, access_token) encoded_auth_string = base64.b64encode(auth_string.encode("utf-8")).decode("utf-8") server._shortcmd(f'AUTH XOAUTH2') server._shortcmd(f'{encoded_auth_string}') # Retrieve the list of emails num_messages = len(server.list()[1]) print(f"There are {num_messages} emails in the inbox.") # Retrieve email content for i in range(num_messages): response, lines, octets = server.retr(i + 1) msg_content = b"\n".join(lines).decode("utf-8") print(f"Email {i + 1}:") print(msg_content) print("=" * 50) # Set the email address and refresh token client_id = 'YOUR_CLIENT_ID' email = "your_email@hotmail.com" t = "YOUR_REFRESH_TOKEN" # Get the access token using the refresh token acc_token = get_access_token(client_id,t) # Connect to POP3 server and access emails connect_pop3(email, acc_token)