[英]Retrieving an ItemAttachment using Microsoft.Graph API
我編寫了一個程序,它成功地使用 Graph API 來檢查郵箱和檢索消息。 如果消息包含標准附件(例如,PDF、Word 文檔),則代碼有效。 我可以在調試中看到這些被認為是“FileAttachment”類型。 但是,如果消息包含作為另一封電子郵件的附件,或作為語音郵件消息的 .wav 文件(這對我來說似乎很奇怪),則程序會阻塞,因為這些附件的類型為ItemAttachment
並且轉換失敗。 相關代碼是這樣的:
var msgTask = GraphClient.Me.MailFolders.Inbox.Messages.Request().Filter(filter).Expand("attachments").GetAsync();
IMailFolderMessagesCollectionPage messages = msgTask.Result;
foreach (Message msg in messages)
{
// ...
foreach (Attachment att in msg.Attachments)
{
FileAttachment attachment = (FileAttachment)att;
MsgFile.Attachments.Add(new System.IO.MemoryStream(attachment.ContentBytes), attachment.Name);
}
}
我進行了一些搜索,並且正在使用 REST 查找文檔以獲取與ItemAttachment
關聯的數據,但我沒有使用 REST,至少沒有直接使用。 這是一個 Windows 命令行應用程序,我使用 NuGet 下載了Microsoft.Graph
和Microsoft.Graph.Core
包。 這些是我在代碼中用於驗證和訪問 Office 365 數據的其他任何地方的庫。
所以,我想知道是否有人對如何使用這些庫來訪問和下載 ItemAttachment 對象有任何見解。 谷歌搜索有關 Graph API 的信息幾乎總是關於 REST。 我找到了一些使用這些庫的示例代碼,但沒有一個涉及 ItemAttachments。
可以像這樣請求附加到消息的項目( 文檔):
var attachmentRequest = graphClient.Me.MailFolders.Inbox.Messages[message.Id]
.Attachments[attachment.Id].Request().Expand("microsoft.graph.itemattachment/item").GetAsync();
var itemAttachment = (ItemAttachment)attachmentRequest.Result;
var itemMessage = (Message) itemAttachment.Item; //get attached message
Console.WriteLine(itemMessage.Body); //print message body
例子
如果附件是文件,演示如何獲取附件並將其保存到文件中,如果附件是項目,則演示如何讀取附件:
var request = graphClient.Me.MailFolders.Inbox.Messages.Request().Expand("attachments").GetAsync();
var messages = request.Result;
foreach (var message in messages)
{
foreach(var attachment in message.Attachments)
{
if (attachment.ODataType == "#microsoft.graph.itemAttachment")
{
var attachmentRequest = graphClient.Me.MailFolders.Inbox.Messages[message.Id]
.Attachments[attachment.Id].Request().Expand("microsoft.graph.itemattachment/item").GetAsync();
var itemAttachment = (ItemAttachment)attachmentRequest.Result;
var itemMessage = (Message) itemAttachment.Item; //get attached message
//...
}
else
{
var fileAttachment = (FileAttachment)attachment;
System.IO.File.WriteAllBytes(System.IO.Path.Combine(downloadPath,fileAttachment.Name), fileAttachment.ContentBytes);
}
}
}
您可以獲取 ItemAttachment 的 InputStream。 請參閱下面的 java 代碼,但對於 c# 將是類似的。 java API 缺少附件上的 .content() 選項,但您可以構建 url 並附加 $value 。
URL requestUrl = graphClient.users("user@***.com").messages("*****").attachments("****").buildRequest().getRequestUrl();
InputStream is = new FileAttachmentStreamRequestBuilder(requestUrl.toString() + "/$value", graphClient, null).buildRequest().get();
// save the file
Files.copy(is, Paths.get(fileName + extension), StandardCopyOption.REPLACE_EXISTING);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.