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

如何使用Microsoft Graph Java SDK获取ItemAttachment(message/rfc822)内容

获取message/rfc822类型ItemAttachment内容的Java SDK解决方案

针对你遇到的ItemAttachment的item字段为空、无法获取message/rfc822类型附件内容的问题,以下是两种无需自定义请求的SDK原生解决方案:

方法一:通过expand加载结构化邮件内容

默认请求附件列表时,ItemAttachment的item字段不会自动加载,只需在请求中添加expand=item参数,即可让SDK返回完整的item对象:

AttachmentCollectionPage attachments = graphClient.users(request.getUser())
        .messages(request.getId())
        .attachments()
        .buildRequest()
        .expand("item") // 显式展开item属性
        .get();

for (Attachment attachment : attachments.getCurrentPage()) {
    if (attachment instanceof ItemAttachment itemAttachment) {
        if ("message/rfc822".equals(itemAttachment.getContentType())) {
            Message attachedMessage = (Message) itemAttachment.getItem();
            // 可直接使用attachedMessage的结构化数据,如subject、body等
        }
    }
}

方法二:获取rfc822原始字节流

如果需要的是原始的rfc822格式邮件内容,可调用SDK的content()方法直接请求/$value端点:

AttachmentCollectionPage attachments = graphClient.users(request.getUser())
        .messages(request.getId())
        .attachments()
        .buildRequest()
        .get();

for (Attachment attachment : attachments.getCurrentPage()) {
    if (attachment instanceof ItemAttachment itemAttachment && "message/rfc822".equals(itemAttachment.getContentType())) {
        InputStream contentStream = graphClient.users(request.getUser())
                .messages(request.getId())
                .attachments(itemAttachment.getId())
                .content() // 对应附件的/$value端点
                .buildRequest()
                .get();
        
        // 将输入流转为字节数组或直接处理
        byte[] rfc822Content = contentStream.readAllBytes();
        // 处理rfc822格式的原始内容
    }
}

内容的提问来源于stack exchange,提问作者Андрей Алексеев

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:55:01