При отправке электронной почты с помощью ClientCredentialProvider не удается найти идентификатор клиента. - PullRequest
1 голос
/ 16 июня 2020

Я использую поддержку Microsoft Identity OAuth 2.0 для отправки электронной почты с помощью Microsoft Graph.

Создал личную учетную запись электронной почты как XXXX@outlook.com. С помощью этой учетной записи я вхожу в Azure AD и создаю там клиента. Использовал ClientCredentialProvider (из msgraph-sdk-auth- java) в качестве авторизатора, пытаясь отправить мне электронное письмо. Шаги:

  1. Создана учетная запись клиента.
  2. Создано приложение и предоставлено разрешение в Graph> Application-> Send.email et c
  3. Created a Secret key

Ниже я получаю ошибку:

POST microsoft.graph.sendMail SdkVersion: graph-java / v1.5.0 Авторизация: Канал _xv1yPye ...

{
  "message": {
    "subject": "Test",
    "body": {
      "contentType": "text",
      "content": "The new cafeteria is open bujji."
    },
    "toRecipients": [
      {
        "emailAddress": {
          "address": "xxxxx@outlook.com"
        }
      }
    ]
  },
  "saveToSentItems": true
}401: UnauthorizedStrict-Transport-Security: max-age=31536000Cache-Control: privatex-ms-ags-diagnostic: {
  "ServerInfo": {
    "DataCenter": "South India",
    "Slice": "SliceC",
    "Ring": "3",
    "ScaleUnit": "001",
    "RoleInstance": "AGSFE_IN_1"
  }
}client-request-id: 01565263-11b4-45f7-b089-06f57fdd8241request-id: 2e0cac3b-dc32-4dab-bb30-769590fc156eContent-Length: 361Date: Tue,
16Jun202007: 14: 42GMTContent-Type: application/json{
  "error": {
    "code": "OrganizationFromTenantGuidNotFound",
    "message": "The tenant for tenant guid \u002706841624-5828-4382-b0a0-XXXXXX87b08f\u0027 does not exist.",
    "innerError": {
      "requestId": "01565263-11b4-45f7-b089-06f57fdd8241",
      "date": "2020-06-16T07:14:43",
      "request-id": "2e0cac3b-dc32-4dab-bb30-769590fc156e"
    }
  }
}

private static void sendEmail() {
    ClientCredentialProvider authProvider = new ClientCredentialProvider(
        "fb7f0ecc-b498-XXXX-XXXX-b016f252ea7d",
        Arrays.asList("https://graph.microsoft.com/.default"),
        "8-rpF8sOwV.CWF~7gK.XXXXXXXX.SSScxj0",
        "06841624-5828-4382-b0a0-XXXXXXe87b08f",
        NationalCloud.Global);
    IGraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider(authProvider).buildClient();

    Message message = new Message();
    message.subject = "Test";
    Ite * mBody body = new ItemBody();
    body.contentType = BodyType.TEXT;
    body.content = "The new cafeteria is open.";
    message.body = body;
    LinkedList < Recipient > toRecipientsList = new LinkedList < Recipient > ();
    Recipient toRecipients = new Recipient();
    EmailAddress emailAddress = new EmailAddress();
    emailAddress.address = "xxxxx@outlook.com";
    toRecipients.emailAddress = emailAddress;
    toRecipientsList.add(toRecipients);
    message.toRecipients = toRecipientsList;
    graphClient.me()
        .sendMail(message, true)
        .buildRequest()
        .post();
}

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Спасибо, Аллен за вашу помощь. Я могу отправлять и получать электронные письма из своей учетной записи Outlook. Используя Провайдер кода авторизации 1. Войдите в систему Azure AD, создайте приложение в «Заявлении из личного аккаунта». 2. Дайте разрешение График> Делегированные> Mail.Send . 3. Предоставлен URL-адрес перенаправления как http://localhost: 8080 / muapp". Запишите все appId, создайте секретный ключ. 4. Теперь нажмите URL-адрес ниже с деталями

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=40fcd457-1807-49e3-8bce-XXXXXX40ca194&response_type=code&redirect_uri=https://localhost/myapp/&response_mode=query&scope=openid%20offline_access%20https%3A%2F%2Fgraph.microsoft.com%2Fmail.send%20https%3A%2F%2Fgraph.microsoft.com%2Fmail.read&state=12345

5. Получите код. Этот код нам необходимо передать Провайдер кода авторизации . 6. Область действия «https://graph.microsoft.com/mail.send« 7. Полномочия »https://login.microsoftonline.com/consumers "

У меня один вопрос каждый раз, когда я отправляю электронное письмо, чтобы получить код. Есть ли способ, которым у него будет срок действия и т. Д. c. ???

0 голосов
/ 17 июня 2020

Я думаю, вы хотите использовать Microsoft Graph API для отправки электронной почты из электронной почты вашей личной учетной записи XXXX@outlook.com.

Но когда вы используете эту учетную запись для входа в Azure AD и создания клиента, и используйте ClientCredentialProvider в вашем коде, учетная запись будет рассматриваться как рабочая учетная запись (не личная учетная запись) вашего клиента.

Таким образом, когда рабочая учетная запись хочет отправить электронное письмо, для этого потребуется онлайн-лицензия Exchange на Подписка на O365. У вас нет подписки на O365 с онлайн-лицензией Exchange. Вот почему вы получаете эту ошибку: The tenant for tenant guid \u002706841624-5828-4382-b0a0-XXXXXX87b08f\u0027 does not exist.

Если вы хотите отправлять электронную почту из своей личной учетной записи, нет необходимости создавать клиента AAD. И вы должны использовать поставщик кода авторизации , а не поставщик учетных данных клиента . Другое дело, что для личной учетной записи требуется делегированное разрешение, а не разрешение приложения на основе разрешения на отправку почты . Создайте приложение и дайте разрешение в Graph> Delegated> Mail.Send .

Обратите внимание, что для этого могут потребоваться области как https://graph.microsoft.com/mail.send вместо https://graph.microsoft.com/.default.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...