Какие пользователи/идентификатор и приложение являются правильными для отправки или создания электронных писем через Microsoft Graph?

#python #microsoft-graph-api #msal

Вопрос:

Я пытаюсь написать приложение, которое создавало бы черновики электронной почты в определенном почтовом ящике (в настоящее время моем собственном). Для этого я использую этот код для получения токена:

 def get_access_token_by_client():
    cache = msal.SerializableTokenCache()
    global app
    app = msal.ConfidentialClientApplication(
        client_id="x",
        authority="https://login.microsoftonline.com/y",
        client_credential="z"
    )

    result = app.acquire_token_silent(scopes=["https://graph.microsoft.com/.default"], account=None)

    if not result:
        result = app.acquire_token_for_client(scopes=["https://graph.microsoft.com/.default"])

    if "access_token" in result:
        return result["access_token"]

    pass
 

а затем отправьте тестовое электронное письмо, подобное этому:

 def send_test_mail(access_token, subject):
    send_mail_url = "https://graph.microsoft.com/v1.0/users/{an-id}/sendMail"

    headers = {
        "Content-Type": "application/json",
        "Authorization": "Bearer {}".format(access_token)
    }

    body = {
        "message": {
            "subject": subject,
            "body": {
                "contentType": "text",
                "content": f"Your bot '{subject}' is running fine."
            },
            "toRecipients": [{
                "emailAddress": {
                    "address": "address-abc"
                }}]
        }
    }

    response = requests.post(send_mail_url, data=json.dumps(body), headers=headers)
    print(response.json())
 

Я дал приложению необходимые разрешения для приложений (не делегированные) и предоставил их также в качестве администратора.

Затем я проверил жетон с помощью jwt.io чтобы подтвердить, что он содержит все разрешения, которые я установил, и это действительно так:

   "roles": [
    "User.Read.All",
    "Mail.Send"
  ],
 

Кажется, все в порядке, когда я звоню https://graph.microsoft.com/v1.0/users/{my-id} API для получения моей собственной информации, которая работает.

However, when I use with the https://graph.microsoft.com/v1.0/users/{my-id}/sendMail API I get this error:

‘code’: ‘ResourceNotFound’, ‘message’: ‘Resource could not be discovered.’

So, I tried to call both of them with the object-id of the app but then the first one says ResourceNotFound and sendMail on the other hand says this:

«код»: «Неверный запрос», «сообщение»: «Текущий аутентифицированный контекст недопустим для этого запроса. Это происходит, когда запрос направляется в конечную точку, для которой требуется вход пользователя. Например, для /me требуется пользователь, вошедший в систему. Приобретите токен от имени пользователя для выполнения запросов к этим конечным точкам. Используйте поток кода авторизации OAuth 2.0 для мобильных и собственных приложений и неявный поток OAuth 2.0 для одностраничных веб-приложений.’

Что мне здесь не хватает или какой идентификатор мне нужно использовать для вызова sendMail API или других из почтовой группы?