Java oauth2 Отправить электронное письмо с помощью Office 365JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Java oauth2 Отправить электронное письмо с помощью Office 365

Сообщение Anonymous »

Я использую Java 1.8, Jakarta Email (версия 2.1.0) для подключения к Microsoft 365, используя OAuth для аутентификации с SMTP. Клиент должен был использовать аутентификацию OAuth, а не базовую аутентификацию SMTP. После чтения документации https: //learn.microsoft.com/en-us/exchange/client-developer ... и множество других ресурсов, которые я настроил на эти разрешения:

Код: Выделить всё

Microsoft Graph    offline_access
Microsoft Graph    User.Read
Microsoft Graph    Mail.Send
Microsoft Graph    openid
Microsoft Graph    IMAP.AccessAsUser.All
Microsoft Graph    SMTP.Send

Office 365 Exchange Online    full_access_as_app
Office 365 Exchange Online    POP.AccessAsApp
Office 365 Exchange Online    Mail.Send
Office 365 Exchange Online    IMAP.AccessAsApp
Активированная аутентификация клиента SMTP с использованием PowerShell на Azure https://learn.microsoft.com/en-us/exchange/clients...

Код: Выделить всё

PS C:\Users\dx-2102> Get-TransportConfig | Format-List SmtpClientAuthenticationDisabled
SmtpClientAuthenticationDisabled : False
< /code>
Реализованный код для отправки электронной почты (Java): < /p>
Properties prop = new Properties();
prop.put("mail.smtp.auth", "true");
prop.put("mail.smtp.starttls.enable", "true");
prop.put("mail.smtp.host", emailSettings.getSmtp().getHostname());
prop.put("mail.smtp.port", emailSettings.getSmtp().getPort());
prop.put("mail.debug", "true");
prop.put("mail.debug.auth", "true");
prop.put("mail.smtp.auth.xoauth2.disable", "false");
prop.put("mail.smtp.auth.mechanisms", "XOAUTH2");
prop.put("mail.transport.protocol", "smtp");
prop.put("mail.smtp.auth.login.disable", "true");
prop.put("mail.smtp.auth.plain.disable", "true");

session = Session.getInstance(prop);
session.setDebug(true);
String accessToken = getOAuth2AccessToken();

transport = session.getTransport("smtp");
transport.connect(emailSettings.getSmtp().getHostname(), emailSettings.getSmtp().getPort(), emailSettings.getSmtp().getUsername(), tokenForSmtp(emailSettings.getSmtp().getUsername(), accessToken));
/* -- */
transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());
transport.close();
Метод вызова/получения токена из Azure Ad, в ответ мы получаем токен с временем истечения срока действия.

Код: Выделить всё

String url = "https://login.microsoftonline.com/" + Tenant_ID + "/oauth2/token";

MultiValueMap map = new LinkedMultiValueMap();
map.add("grant_type", "client_credentials");
map.add("response_type", "code");
map.add("client_id", ClientId);
map.add("client_secret", ClientSecret);
map.add("scope","openid offline_access https%3A%2F%2Foutlook.office365.com%2FSMTP.Send ");

RestTemplate restTemplate = new RestTemplate();
ResponseEntity response = restTemplate.postForEntity(url, map, AzureResponse.class);
< /code>
Метод подготовки токена для отправки в процессе SMTP Send-mail < /p>
private String tokenForSmtp(String userName, String accessToken) {
final String ctrlA=Character.toString((char) 1);
final String coded= "user=" + userName + ctrlA+"auth=Bearer " + accessToken + ctrlA+ctrlA;
return Base64.getEncoder().encodeToString(coded.getBytes());
//base64("user=" + userName + "^Aauth=Bearer " + accessToken + "^A^A")
}
< /code>
После отправки электронного письма SMTP я получаю ошибку: < /p>
AUTH XOAUTH2 dXNlcj1zb2ZhQHNvbHV0aW9uZmFjdG9yeWFnLm9ub...=
535 5.7.3 Authentication unsuccessful [VI1PR0202CA0024.eurprd02.prod.outlook.com]
Error on sending email: 535 5.7.3 Authentication unsuccessful [VI1PR0202CA0024.eurprd02.prod.outlook.com]
Нужен ли мне какой -то другой токен с прицелом от Azure Ad, кроме OpenID, Offline_access и https://outlook.office.com/smtp.send? Или я скучаю по чему -то еще в конфигурации Azure? У кого -то есть пример Java о том, как это должно быть сделано, пожалуйста, не стесняйтесь прикрепить его. Также, если у вас есть некоторые скриншоты того, что настроить на учетной записи Azure.

Подробнее здесь: https://stackoverflow.com/questions/740 ... office-365
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Мне нужно отправить электронное письмо из C# из учетной записи Microsoft 365 [закрыто]
    Anonymous » » в форуме C#
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • MailKit, Office 365 и OAUTH2: проблема с аутентификацией серверного приложения
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • MailKit, Office 365 и OAUTH2: проблема с аутентификацией серверного приложения
    Anonymous » » в форуме C#
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Создайте электронное письмо в Dynamics 365 с помощью php, используя AlexaCRM php-crm-toolkit.
    Anonymous » » в форуме Php
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Создайте электронное письмо в Dynamics 365 с помощью php, используя AlexaCRM php-crm-toolkit.
    Anonymous » » в форуме Php
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»