Я чувствую, что мне следует это сделать. можно каким-то образом получить токен для взаимодействия с графическим API, используя ТОЛЬКО имя и пароль, а затем отправить электронное письмо. Однако я продолжаю натыкаться на стены.
Я не могу заставить администратора моего приложения просто отправлять электронную почту от имени ЛЮБОГО пользователя. Все, что я пытаюсь сделать, это отправить электронное письмо со своей системной учетной записи. Я МОГУ сделать это вручную в приложении Outlook на своем рабочем столе, но не могу сделать это из своей среды разработки Python.
Я хочу сделать это, если возможно, с использованием HTTP-запросов
Код: Выделить всё
import requests_oauthlib
from requests_oauthlib import OAuth2Session
from oauthlib.oauth2 import LegacyApplicationClient
tenant_id = tid
client_id = cid
client_secret = cs
uri =f"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token"
username=un
password=pw
#DOES NOT WORK says the user account doesn't exist
oauth = OAuth2Session(client=LegacyApplicationClient(client_id=client_id))
token = oauth.fetch_token(
token_url=uri
,client_id=client_id
,client_secret=client_secret
,username=username
,password=password
,scope="Mail.Send"
)
#THIS DOES WORK BUT I CANT GET IT TO EMAIL
client = BackendApplicationClient(client_id=client_id)
oauth = OAuth2Session(client=client)
token = oauth.fetch_token(
token_url=uri
,client_id=client_id
,client_secret=client_secret
,scope=["https://graph.microsoft.com/.default"]
)
recipient='[email protected]'
subject="test_subject"
body="test_body"
request_body = {
'message': {
# recipient list
'toRecipients': [
{
'emailAddress': {
'address': recipient
}
}
],
# email subject
'subject': subject,
"body": {
"contentType": "html",
"content": body
},
'importance': 'normal',
}
}
headers = {
'Authorization': 'Bearer ' + token['access_token']
}
GRAPH_ENDPOINT = 'https://graph.microsoft.com/v1.0'
endpoint = GRAPH_ENDPOINT + '/me/sendMail'
response = requests.post(endpoint, headers=headers, json=request_body)
response.raise_for_status() # Raise an exception if request fails
if response.status_code == 202:
print(f"Email sent to: {recipient}")
else:
print(f"Email not sent to: {recipient}")
Подробнее здесь: https://stackoverflow.com/questions/791 ... sword-from