import requests
import webbrowser
import urllib.parse
class GraphEmailSender:
def __init__(self, client_id, tenant_id):
"""
Initialize Graph Email Sender
:param client_id: Azure AD application client ID
:param tenant_id: Azure AD tenant ID
"""
self.client_id = client_id
self.tenant_id = tenant_id
# OAuth endpoints
self.authorize_url = f'https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/authorize'
self.token_url = f'https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token'
# Graph API endpoint
self.graph_endpoint = 'https://graph.microsoft.com/v1.0'
# Redirect URI (must be registered in Azure AD app)
self.redirect_uri = 'http://localhost:8000/callback'
# Scopes for email sending
self.scopes = [
'https://graph.microsoft.com/Mail.Send',
'https://graph.microsoft.com/User.Read',
'offline_access'
]
def get_authorization_code(self):
"""
Generate authorization URL and prompt for manual code entry
:return: Authorization code
"""
# Prepare authorization request parameters
auth_params = {
'client_id': self.client_id,
'response_type': 'code',
'redirect_uri': self.redirect_uri,
'scope': ' '.join(self.scopes),
'response_mode':'fragment'
}
# Construct authorization URL
auth_url = f"{self.authorize_url}?{urllib.parse.urlencode(auth_params)}"
# Open browser for authorization
print("Please authorize the application:")
webbrowser.open(auth_url)
# Manually enter authorization code
auth_code = input("Enter the authorization code from the redirect URL: ")
return auth_code
def exchange_code_for_token(self, authorization_code):
"""
Manually exchange authorization code for access token
:param authorization_code: Authorization code
:return: Access token
"""
# Prepare token exchange parameters
token_params = {
'client_id': self.client_id,
'grant_type': 'authorization_code',
'code': authorization_code,
'redirect_uri': self.redirect_uri,
'scope': ' '.join(self.scopes),
'client_secret':'Ixxxx'
}
# Send token request
response = requests.post(
self.token_url,
data=token_params,
headers={'Content-Type': 'application/x-www-form-urlencoded'}
)
# Return access token
return response.json().get('access_token')
def send_email(self, access_token, to_email, subject, body):
"""
Send email using access token
:param access_token: OAuth access token
:param to_email: Recipient email address
:param subject: Email subject
:param body: Email body
:return: Boolean indicating success
"""
# Prepare email message
email_message = {
"message": {
"subject": subject,
"body": {
"contentType": "Text",
"content": body
},
"toRecipients": [
{
"emailAddress": {
"address": to_email
}
}
],
"from":{
"emailAddresss":{
"address":"lxxx1@gmail.com"
}
}
},
"saveToSentItems": "true"
}
# Prepare headers
headers = {
'Authorization': f'Bearer {access_token}',
'Content-Type': 'application/json'
}
try:
# Send email via Graph API
response = requests.post(
f'{self.graph_endpoint}/me/sendMail',
json=email_message,
headers=headers
)
# Check response
if response.status_code in [200, 201, 202]:
print("Email sent successfully!")
return True
else:
print(f"Failed to send email. Status code: {response.status_code} {response}")
return False
except Exception as e:
print(f"Error sending email: {e}")
return False
# Example usage
def main():
# Replace with your actual Azure AD application details
TENANT_ID = '97sss'
CLIENT_ID = '803csss'
# Create email sender
email_sender = GraphEmailSender(CLIENT_ID, TENANT_ID)
# Get authorization code (manual process)
auth_code = email_sender.get_authorization_code()
# Exchange code for access token
access_token = email_sender.exchange_code_for_token(auth_code)
# Send email
email_sender.send_email(
access_token,
to_email='gagsgdg@gmail.com',
subject='OAuth Email Test',
body='Email sent using simplified OAuth flow.'
)
if __name__ == '__main__':
main()
Es scheint, als ob das Zugangs -Token, das generiert wird, auch alle Berechtigungen (Scope) hat, d. H. Mail.send, Benutzer. Nicht autorisierter Fehler. < /p>
# Check response if response.status_code in [200, 201, 202]: print("Email sent successfully!") return True else: print(f"Failed to send email. Status code: {response.status_code} {response}") return False
except Exception as e: print(f"Error sending email: {e}") return False
# Example usage def main(): # Replace with your actual Azure AD application details TENANT_ID = '97sss' CLIENT_ID = '803csss'
# Get authorization code (manual process) auth_code = email_sender.get_authorization_code()
# Exchange code for access token access_token = email_sender.exchange_code_for_token(auth_code)
# Send email email_sender.send_email( access_token, to_email='gagsgdg@gmail.com', subject='OAuth Email Test', body='Email sent using simplified OAuth flow.' )
if __name__ == '__main__': main() [/code] Es scheint, als ob das Zugangs -Token, das generiert wird, auch alle Berechtigungen (Scope) hat, d. H. Mail.send, Benutzer. Nicht autorisierter Fehler. < /p> [code]Failed to send email. Status code: 401 [/code] Ich habe auch den redirect_uri und unterstützten Konto -Typ auf alle Konten eingestellt
Ich entwickle derzeit eine E-Portfolio-Website, während ich die endgültigen Schritte für die Website erstellt und ein Problem mit meinem Eingabebereich-Bereich erstellt und Arbeitgebern die...
Ich habe eine E -Mail -Funktionalität in meiner .NET -Web -API und es funktioniert in Dev/Tests einwandfrei. Aber in UAT sendet es keine E -Mails. Bei weiteren Untersuchungen stellte fest, dass UAT...
Ich versuche, eine App in Python zu erstellen, in der MS-Diagramm zum Senden von E-Mails aus einem freigegebenen Mailbox verwendet wird. Ich habe mich auf das MSGRAPH-SDK -Modul konzentriert. Ich...
Trotz X -Druck, wenn ich alleine getestet habe, bekomme ich immer wieder Oserrror: Ungültiges Argument. Die Datei selbst ist auch mit Panoply zu öffnen.
import numpy as np
import pandas as pd...
Ich habe ein Java-Programm, das mit dem Microsoft Graph API SDK E-Mails und ihre Anhänge aus einem Postfach liest, aber wenn jemand eine sichere E-Mail sendet, kann es den Inhalt nicht abrufen,...