Могу ли я спросить, как использовать почтовый сервер Outlook для отправки электронных писем? При просмотре документов трJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Могу ли я спросить, как использовать почтовый сервер Outlook для отправки электронных писем? При просмотре документов тр

Сообщение Anonymous »

Причина в том, что Microsoft ранее внесла изменения в аутентификацию электронной почты, что привело к невозможности отправки. При поиске ответов в Интернете необходимо применить регистрацию в Azure и добавить разрешения в соответствии с процессом ответа. После этих операций аутентификация не удалась при использовании аутентификации OAuth2. Шаги кода, используемые для сравнения ответов, полностью совпадают, но неясно, настроен ли вопрос в Azure или где-то еще.
Вот код
package com.tianrun.common.email;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class OAuth2Helper {
public static void main(String[] args) throws Exception {
String accessToken = getAccessToken();
sendEmail(accessToken, "****@outlook.com", "******", "Subject", "Body of the email");
}

private static String getAccessToken() throws Exception {
String clientId = "****";
String clientSecret = "****";
String tenantId = "*****";
String scope = "https://outlook.office365.com/.default";

String authUrl = "https://login.microsoftonline.com/" + tenantId + "/oauth2/v2.0/token";
URL url = new URL(authUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setDoOutput(true);

String postParams = "client_id=" + clientId +
"&scope=" + scope +
"&client_secret=" + clientSecret +
"&grant_type=client_credentials";

conn.getOutputStream().write(postParams.getBytes());

BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuffer content = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
in.close();
conn.disconnect();

// Parse the JSON response to get the access token
String accessToken = content.toString().split("\"access_token\":\"")[1].split("\"")[0];
System.out.println(accessToken);
return accessToken;
}

private static void sendEmail(String accessToken, String sender, String recipient, String subject, String body)
throws MessagingException {
Properties props = new Properties();
props.setProperty("mail.debug", "true");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.host", "smtp.office365.com");
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.port", "587");
props.put("mail.smtp.ssl.protocols", "TLSv1.2");
props.put("mail.smtp.starttls.enable", "true");

// Create a custom Authenticator with the OAuth2 access token

Session session = Session.getInstance(props, null);

Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(sender));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipient));
message.setSubject(subject);
message.setText(body);

Transport.send(message);
}
}

*****This is an error log*****
javax.mail.AuthenticationfailedException: 535 5.7.3 Authentication unsuccesful [SI2PR6CA0e12.apcprd6.prod.outlook.com 224-11-1T96:16:51.8952 809172787151CE]


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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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