Программисты JAVA общаются здесь
Anonymous
Как преобразовать MimeMessage в строку для Microsoft Graph
Сообщение
Anonymous » 13 дек 2024, 02:16
У меня есть следующий код Java, который пытается создать сообщение MIME и отправить его в граф Microsoft. Я попробовал выполнить несколько примеров (см. комментарии в коде), но все равно получаю сообщение об ошибке. Мой код:
Код: Выделить всё
private MimeMessage createMimeMessageEmail(EmailDetails emailDetails, boolean includeUnsubscribeLink) {
try {
Session session = Session.getDefaultInstance(new Properties());
MimeMessage mimeMessage = new MimeMessage(session);
mimeMessage.setFrom(emailDetails.getFrom());
mimeMessage.setSubject(emailDetails.getSubject());
// https://stackoverflow.com/questions/5068827/how-do-i-send-an-html-email
mimeMessage.setContent(emailDetails.getHtmlBody(), "text/html; charset=utf-8");
mimeMessage.addRecipient(jakarta.mail.Message.RecipientType.TO, new InternetAddress(emailDetails.getTo()));
// if (includeUnsubscribeLink && StringUtils.isNotBlank(emailDetails.getUnsubscribeId())) {
// mimeMessage.addHeader("List-Unsubscribe", UnsubscribeLinkUtil.getLink(emailDetails.getUnsubscribeId()));
// mimeMessage.addHeader("List-Unsubscribe-Post", "List-Unsubscribe=One-Click");
// }
return mimeMessage;
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
и
Код: Выделить всё
private void doMyTest(EmailDetails emailDetails, OAuthAccessToken accessToken) {
MimeMessage mimeMessage = createMimeMessageEmail(emailDetails, true);
String encodedEmail = null;
try {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
mimeMessage.writeTo(buffer);
byte[] bytes = buffer.toByteArray();
encodedEmail = Base64.encodeBase64URLSafeString(bytes);
} catch (Exception e) {
throw new RuntimeException(e);
}
try {
HttpPost post = new HttpPost("https://graph.microsoft.com/v1.0/me/sendMail");
post.setEntity(new StringEntity(encodedEmail));
post.setHeader("Content-type", "text/plain");
post.setHeader("Authorization", "Bearer " + accessToken.getTokenValue());
try (CloseableHttpClient httpclient = HttpClients.createDefault()) {
Integer intV = httpclient.execute(post, httpResponse -> {
// Get status code
int responseCode = httpResponse.getCode();
String json = EntityUtils.toString(httpResponse.getEntity());
if (responseCode != 200) {
return responseCode;
}
// String json = EntityUtils.toString(httpResponse.getEntity());
return responseCode;
});
}
} catch (Exception e) {
}
}
```
But I keep getting:
```{"error":{"code":"ErrorMimeContentInvalidBase64String","message":"Invalid base64 string for MIME content."}}
Кто-нибудь знает, как закодировать mime-сообщение?
Подробнее здесь:
https://stackoverflow.com/questions/792 ... soft-graph
1734045372
Anonymous
У меня есть следующий код Java, который пытается создать сообщение MIME и отправить его в граф Microsoft. Я попробовал выполнить несколько примеров (см. комментарии в коде), но все равно получаю сообщение об ошибке. Мой код: [code]private MimeMessage createMimeMessageEmail(EmailDetails emailDetails, boolean includeUnsubscribeLink) { try { Session session = Session.getDefaultInstance(new Properties()); MimeMessage mimeMessage = new MimeMessage(session); mimeMessage.setFrom(emailDetails.getFrom()); mimeMessage.setSubject(emailDetails.getSubject()); // https://stackoverflow.com/questions/5068827/how-do-i-send-an-html-email mimeMessage.setContent(emailDetails.getHtmlBody(), "text/html; charset=utf-8"); mimeMessage.addRecipient(jakarta.mail.Message.RecipientType.TO, new InternetAddress(emailDetails.getTo())); // if (includeUnsubscribeLink && StringUtils.isNotBlank(emailDetails.getUnsubscribeId())) { // mimeMessage.addHeader("List-Unsubscribe", UnsubscribeLinkUtil.getLink(emailDetails.getUnsubscribeId())); // mimeMessage.addHeader("List-Unsubscribe-Post", "List-Unsubscribe=One-Click"); // } return mimeMessage; } catch (MessagingException e) { throw new RuntimeException(e); } } [/code] и [code]private void doMyTest(EmailDetails emailDetails, OAuthAccessToken accessToken) { MimeMessage mimeMessage = createMimeMessageEmail(emailDetails, true); String encodedEmail = null; try { ByteArrayOutputStream buffer = new ByteArrayOutputStream(); mimeMessage.writeTo(buffer); byte[] bytes = buffer.toByteArray(); encodedEmail = Base64.encodeBase64URLSafeString(bytes); } catch (Exception e) { throw new RuntimeException(e); } try { HttpPost post = new HttpPost("https://graph.microsoft.com/v1.0/me/sendMail"); post.setEntity(new StringEntity(encodedEmail)); post.setHeader("Content-type", "text/plain"); post.setHeader("Authorization", "Bearer " + accessToken.getTokenValue()); try (CloseableHttpClient httpclient = HttpClients.createDefault()) { Integer intV = httpclient.execute(post, httpResponse -> { // Get status code int responseCode = httpResponse.getCode(); String json = EntityUtils.toString(httpResponse.getEntity()); if (responseCode != 200) { return responseCode; } // String json = EntityUtils.toString(httpResponse.getEntity()); return responseCode; }); } } catch (Exception e) { } } ``` But I keep getting: ```{"error":{"code":"ErrorMimeContentInvalidBase64String","message":"Invalid base64 string for MIME content."}} [/code] Кто-нибудь знает, как закодировать mime-сообщение? Подробнее здесь: [url]https://stackoverflow.com/questions/79276842/how-to-convert-mimemessage-to-string-for-microsoft-graph[/url]