希望这里有人可以启发我如何使用 Microsoft Graph 从电子邮件下载附件。我正在尝试自动下载和处理 Office 365 邮件中特定主题的附件。到目前为止,我已成功迭代消息并将它们放入名为 messageList 的列表中,但未能成功检索每条消息中的附件名称并下载它们。这是我的代码:
var messages = await graphClient
.Users[userEmail]
.MailFolders[folderId]
.Messages
.GetAsync((requestConfiguration) =>
{
//requestConfiguration.QueryParameters.Count = true;
//requestConfiguration.Headers.Add("ConsistencyLevel", "eventual");
requestConfiguration.QueryParameters.Filter =
"receivedDateTime ge 1900-01-01T00:00:00Z and (from/emailAddress/address) eq '[email protected]'";
requestConfiguration.QueryParameters.Orderby = new string[] { "receivedDateTime desc"};
});
var messageList = new List<Message>();
var pageIterator = PageIterator<Message, MessageCollectionResponse>.
CreatePageIterator(graphClient, messages, (message) =>
{
//Console.WriteLine(message.Subject);
messageList.Add(message);
return true;
});
await pageIterator.IterateAsync();
while (pageIterator.State != PagingState.Complete)
{
await pageIterator.IterateAsync();
}
foreach (var m in messageList)
{
if (m.HasAttachments == true)
{
var attachments=m.Attachments;
if (attachments != null)
{
foreach (var attachment in attachments)
{
Console.WriteLine("Attachment Name : " + attachment.Name);
}
}
Console.WriteLine(m.Subject + " Has attachment(s)");
}
}
如果我在 Autos 中查看 m 对象,它的 Attachment 属性为 null。 请帮忙,特别是下载文件。预先感谢您的帮助。
默认情况下不包含附件,您需要使用 Expand 告诉服务器响应中应包含附件。然后你需要将每个附件转换为
FileAttachment
才能读取数据
var messages = await graphClient
.Users[""]
.MailFolders[""]
.Messages
.GetAsync((requestConfiguration) =>
{
requestConfiguration.QueryParameters.Filter =
"receivedDateTime ge 1900-01-01T00:00:00Z and (from/emailAddress/address) eq '[email protected]'";
requestConfiguration.QueryParameters.Orderby = new string[] { "receivedDateTime desc" };
// return also attachments
requestConfiguration.QueryParameters.Expand = new string[] { "attachments" };
});
var messageList = new List<Message>();
var pageIterator = PageIterator<Message, MessageCollectionResponse>.
CreatePageIterator(graphClient, messages, (message) =>
{
//Console.WriteLine(message.Subject);
messageList.Add(message);
return true;
});
await pageIterator.IterateAsync();
while (pageIterator.State != PagingState.Complete)
{
await pageIterator.IterateAsync();
}
foreach (var m in messageList)
{
if (m.HasAttachments == true)
{
foreach (var attachment in m.Attachments)
{
Console.WriteLine("Attachment Name : " + attachment.Name);
if (attachment is FileAttachment fileAttachment)
{
// content is base64 encoded bytes
var base64String = Encoding.ASCII.GetString(fileAttachment.ContentBytes);
var bytes = Convert.FromBase64String(base64String);
File.WriteAllBytes("path", bytes);
}
}
}
Console.WriteLine(m.Subject + " Has attachment(s)");
}
从性能角度来看,过滤带附件的消息会更好
var messages = await graphClient
.Users[""]
.MailFolders[""]
.Messages
.GetAsync((requestConfiguration) =>
{
requestConfiguration.QueryParameters.Filter =
"receivedDateTime ge 1900-01-01T00:00:00Z and (from/emailAddress/address) eq '[email protected]' and hasAttachments eq true";
requestConfiguration.QueryParameters.Orderby = new string[] { "receivedDateTime desc" };
});
并为每条消息单独调用以返回附件
var attachments = await graphClient
.Users[""]
.MailFolders[""]
.Messages["{message_id}"].Attachments.GetAsync()