You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Microsoft Graph Java SDK发送MIME格式电子邮件?

问题原因

你调用接口报错的核心原因是发送MIME格式邮件的请求规则和常规JSON传参的sendMail调用完全不匹配:

  • MIME格式发信要求请求体直接为Base64编码的MIME内容字符串,请求头Content-Type设为text/plain,不能有任何外层JSON包装
  • 你当前的代码使用Message对象和UserSendMailParameterSet构造参数,SDK会自动将参数序列化为JSON结构,手动设置的Content-Type头和实际请求体格式完全不匹配,服务端尝试将整个JSON串作为Base64内容解码,自然返回格式错误。

可行解决方案

Microsoft Graph Java SDK支持直接传入原始字符串作为请求体,不需要使用封装好的JSON参数构造逻辑,正确代码示例如下:

import java.nio.charset.StandardCharsets;
import java.util.Base64;
import com.microsoft.graph.http.QueryOption;

// 1. 处理MIME内容编码,明确指定UTF-8避免不同环境默认字符集异常
final String mimeMessageRFC822 = input.getMimeMessageRFC822();
String base64MimeContent = Base64.getMimeEncoder()
    .encodeToString(mimeMessageRFC822.getBytes(StandardCharsets.UTF_8));

// 2. 构造Graph请求,直接传入Base64内容作为请求体
GraphServiceClient service = getService(acHost, configuration);

service.me()
    .sendMail()
    // 如需保存到已发送,添加查询参数即可
    .buildRequest(new QueryOption("saveToSentItems", "true"))
    .withHeader("Content-Type", "text/plain")
    .post(base64MimeContent);

补充说明

Java SDK并没有缺失MIME邮件发送能力,只是封装好的UserSendMailParameterSet是为结构化JSON传参场景设计的,原始MIME发送场景需要使用直接传原始请求体的调用方式即可。

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 23:57:03