我目前使用图形API下载消息,然后将它们移动到不同的邮件文件夹。这一切都很完美。作为这个过程的一部分,虽然我们需要添加一个自定义标题的电子邮件,然后我们可以跟踪它更容易看到它的结束。我们曾经使用Mime/MailKit来完成所有这些,但是,它还不支持Graph API,因此是非交互式的OAuth2.0。
我试着在邮件中添加标题,将其上传到新邮件文件夹,然后删除原始邮件。然而,这样做似乎意味着我们丢失了信息(附件、其他主体类型、标题等)。
var messageHeaders = new System.Collections.Generic.List<InternetMessageHeader>();
if (message.InternetMessageHeaders != null)
{
messageHeaders.AddRange(message.InternetMessageHeaders);
}
InternetMessageHeader header = messageHeaders.FirstOrDefault(h => h.Name.Equals(HEADER_ID));
if (header != null)
{
header.Value = headerValue;
}
else
{
messageHeaders.Add(new InternetMessageHeader()
{
Name = HEADER_ID,
Value = headerValue
});
}
message.InternetMessageHeaders = messageHeaders;
Message uploadedMessage = await UploadMessageAsync(graphServiceClient, user, destinationMailFolder, message);
await DeleteMessageAsync(graphServiceClient, user, message);
static async Task<Message> UploadMessageAsync(GraphServiceClient graphServiceClient, User user, MailFolder mailFolder, Message message)
=> await graphServiceClient.Users[user.Id].MailFolders[mailFolder.Id].Messages.Request().AddAsync(message);
static async Task DeleteMessageAsync(GraphServiceClient graphServiceClient, User user, Message message)
{
await graphServiceClient.Users[user.Id].Messages[message.Id].Request().DeleteAsync();
}
然后我想尝试用不同的方式来做,我将下载消息的MIME内容,添加标题,然后重新上传消息。我可以很容易地完成第一部分。然而,我无法找到一种方法来上传消息从文件/流使用图形API。
最后,我认为更新消息可能是这里的方式,但根据文档,它看起来不像你可以这样改变/添加头。
我该怎么做?
我相信MIME支持目前是只读的。要移动邮件,我建议使用move动作:
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var destinationId = "deleteditems";
await graphClient.Me.Messages["{message-id}"]
.Move(destinationId)
.Request()
.PostAsync();
https://learn.microsoft.com/en - us/graph/api/message move?view=graph -休息- 1.0,标签= http
不幸的是,internetMessageHeader属性目前是只读的。我建议提交一份请求,也就是。Ms/graphrequest添加支持写入这些头。