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

How do you send MIME format emails using Microsoft Graph Java SDK?

官方文档未提供任何 SDK(包括 Java SDK)的示例:https://docs.microsoft.com/en-us/graph/api/user-sendmail?view=graph-rest-1.0&tabs=java#example-4-send-a-new-message-using-mime-format。由于没有例子,我试过用SDK发送MIME内容,但没有成功(microsoft-graph 5.0.0):

Message sending = new Message();
ItemBody body = new ItemBody();
final String mimeMessageRFC822 = input.getMimeMessageRFC822();
body.content = Base64.getMimeEncoder().encodeToString(mimeMessageRFC822.getBytes());
sending.body = body;

GraphServiceClient service = getService(acHost, configuration);
service
    .me()
    .sendMail(UserSendMailParameterSet.newBuilder().withMessage(sending).withSaveToSentItems(true).build())
    .buildRequest(new HeaderOption("Content-Type", "text/plain"))
    .post();

上面的代码将请求的 content-type 设置为 text/plain,但是发送的请求正文是 JSON (下面的 xxxxxx 是有效的占位符Base64 编码的 MIME 内容字符串)。

{
    "message":
    {
        "body":
        {
            "content": xxxxxx
        }
    },
    "saveToSentItems": true
}

响应是 404,说明:

GraphServiceException: Error code: ErrorMimeContentInvalidBase64String Error message: Invalid base64 string for MIME content.

我可以理解为什么它会响应此错误,因为图形端点正在将 text/plain 内容解析为 base64 编码的 MIME,但却找到了 JSON 结构。我一直在与 Microsoft Graph 支持代理进行视频通话,他们发现我的 MIME 内容是有效的。遗憾的是,他们无法帮助 Microsoft Graph Java SDK,即使它是由 Microsoft 开发的!

这表明我们根本不应该使用 Java SDK 来发送 MIME 格式的电子邮件。这个对吗?当然不可能,否则图书馆可以接收 MIME 格式的电子邮件但不能发送它们的意义何在?有人有解决方案吗?

目前至少解决方案是发送带有 MIME 内容的 CustomRequest,而不是使用 Graph 客户端提供的流畅 API。

final String encodedContent = Base64.getMimeEncoder().encodeToString(mimeMessageRFC822.getBytes());
CustomRequest<String> request = new CustomRequest<>(requestUrl, service, List.of(new HeaderOption("Content-Type", "text/plain")), String.class);
request.post(encodedContent);