如何使用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,提问作者Андрей Алексеев
相关产品推荐
相关产品推荐

