如何使用Microsoft Graph从Item Attachment获取MIME Content?
获取Item Attachment的MIME内容(C# Graph SDK)
你当前通过Expand获取Item Attachment的代码只能拿到嵌套message的元数据,要获取它的MIME内容,需要针对展开后的item资源调用Content接口,对应API中$value的路径,具体实现如下:
现有代码问题
你当前的代码:
var result = await _appClient .Users[userId].Messages[messageId].Attachments[attachmentId].GetAsync((requestConfiguration) => { requestConfiguration.QueryParameters.Expand = new string[] { "microsoft.graph.itemattachment/item"}; });
返回的仅包含嵌套message的基础信息,没有MIME内容。
解决方案
要获取嵌套message的MIME内容,可以直接调用Item.Content.GetAsync()方法,这对应API路径末尾的$value:
方法一:先获取Attachment再获取MIME内容
// 获取Item Attachment并展开嵌套的message var itemAttachment = await _appClient .Users[userId] .Messages[messageId] .Attachments[attachmentId] .GetAsync(config => { config.QueryParameters.Expand = new[] { "microsoft.graph.itemattachment/item" }; }); // 类型校验后获取MIME内容 if (itemAttachment is ItemAttachment itemAtt && itemAtt.Item is Message nestedMsg) { var mimeStream = await _appClient .Users[userId] .Messages[messageId] .Attachments[attachmentId] .Item .Content .GetAsync(); // 将流转换为字符串 using var streamReader = new StreamReader(mimeStream); string mimeContent = await streamReader.ReadToEndAsync(); }
方法二:直接请求MIME内容
如果不需要Attachment的其他信息,可以直接构造请求获取MIME流:
var mimeStream = await _appClient .Users[userId] .Messages[messageId] .Attachments[attachmentId] .Item .Content .GetAsync(); // 处理流,比如保存到文件或转换为字符串 using var fileStream = new FileStream("nested-message.eml", FileMode.Create); await mimeStream.CopyToAsync(fileStream);
说明
Item.Content.GetAsync()方法对应的Graph API路径是/users/{userId}/messages/{messageId}/attachments/{attachmentId}/item/$value,会直接返回嵌套message的MIME格式内容(通常是.eml格式的流)。
内容的提问来源于stack exchange,提问作者dougbob
相关产品推荐
相关产品推荐

