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

如何通过Microsoft Graph API SDK读取S/MIME邮件及附件

处理Microsoft Graph API读取S/MIME加密邮件的方案

权限前置检查

确保你的应用已申请Mail.Read或Mail.ReadWrite权限:

  • 若使用Delegated权限,需用户完成授权;
  • 若使用Application权限,需管理员提前授权,且Exchange Online已配置证书同步(用于解密)。
    同时目标邮箱必须已导入对应的S/MIME私钥证书,否则无法完成解密。

获取解密后的邮件内容

常规的getMessage方法只能获取加密后的原始邮件数据,必须调用Graph API的decrypt动作获取明文内容。Java SDK示例代码:

// 初始化已授权的GraphServiceClient
GraphServiceClient<Request> graphClient = GraphServiceClient.builder()
    .authenticationProvider(yourAuthProvider)
    .buildClient();

// 调用decrypt接口获取解密后的邮件
Message decryptedMsg = graphClient.me().messages("目标邮件ID")
    .decrypt(DecryptPostRequestBody.newBuilder().build())
    .buildRequest()
    .post();

// 读取明文邮件内容
String plainContent = decryptedMsg.body.content;

提取解密后的附件

解密后的邮件对象中,attachments集合已包含明文附件,直接遍历处理即可:

for (Attachment att : decryptedMsg.attachments) {
    if (att instanceof FileAttachment) {
        FileAttachment fileAtt = (FileAttachment) att;
        // 获取附件字节数据
        byte[] attContent = fileAtt.contentBytes;
        // 示例:保存到本地文件
        Files.write(Paths.get("本地保存路径/" + fileAtt.name), attContent);
    }
}

处理仅签名的S/MIME邮件

对于仅签名未加密的邮件,Graph API会自动返回明文内容,若需验证签名有效性,可调用verifySignature动作:

VerifySignatureResponse sigResult = graphClient.me().messages("目标邮件ID")
    .verifySignature(VerifySignaturePostRequestBody.newBuilder().build())
    .buildRequest()
    .post();

// 检查签名是否有效
boolean isSigValid = sigResult.isValid();

常见问题

  • 解密失败返回403/400:检查邮箱是否有对应私钥、应用权限是否正确、Exchange证书同步是否完成;
  • SDK调用报错:确保使用最新版Microsoft Graph Java SDK(建议v5及以上),旧版本可能不支持decrypt动作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 01:15:57