如何使用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
相关产品推荐
相关产品推荐

