Warum bekomme ich immer wieder "401 nicht autorisierte" Antwort beim Senden von E -Mails über Graph -API mit delegiertemPython

Python-Programme
Anonymous
 Warum bekomme ich immer wieder "401 nicht autorisierte" Antwort beim Senden von E -Mails über Graph -API mit delegiertem

Post by Anonymous »

Ich habe eine App auf Azure erstellt, um E -Mails mit Graph -API mit delegierter Typ Access

zu veranstalten. OAuth2/v2.0/Token -Endpunkte mit dem folgenden Code

Code: Select all

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>

Code: Select all

Failed to send email. Status code: 401 

Ich habe auch den redirect_uri und unterstützten Konto -Typ auf alle Konten eingestellt

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post