c# - 将对象保存为 .msg 文件时缺少 Microsoft.Graph.Message 到 MsgKit.Email 图像
问题描述
我正在尝试将 Microsoft.Graph.Message 转换为 MsgKit.Email 对象并将对象另存为 .msg 文件。我能够读取文件附件并保存,但图像没有保存在我的 .msg 文件中。请指导和帮助我..
我是
var email = new Email(new Sender(message.Sender.EmailAddress.Address, message.Sender.EmailAddress.Name), message.Subject);
email.SentOn = DateTimeOffset.Parse(message.SentDateTime.ToString()).DateTime;
email.ReceivedOn = DateTimeOffset.Parse(message.ReceivedDateTime.ToString()).DateTime;
email.InternetMessageId = message.InternetMessageId;
//Importance
switch (message.Importance)
{
case Importance.Low:
email.Importance = MessageImportance.IMPORTANCE_LOW;
break;
case Importance.Normal:
email.Importance = MessageImportance.IMPORTANCE_NORMAL;
break;
case Importance.High:
email.Importance = MessageImportance.IMPORTANCE_HIGH;
break;
}
//To
foreach (var to in message.ToRecipients)
{
email.Recipients.AddTo(to.EmailAddress.Address, to.EmailAddress.Name);
}
//Cc
foreach (var cc in message.CcRecipients)
{
email.Recipients.AddCc(cc.EmailAddress.Address, cc.EmailAddress.Name);
}
//Bcc
foreach (var bcc in message.BccRecipients)
{
email.Recipients.AddBcc(bcc.EmailAddress.Address, bcc.EmailAddress.Name);
}
switch (message.Body.ContentType)
{
case BodyType.Text:
email.BodyText = message.Body.Content;
break;
case BodyType.Html:
email.BodyHtml = message.Body.Content;
break;
default:
email.BodyText = message.Body.Content;
break;
}
if (message.HasAttachments == true)
{
foreach (dynamic attachmentFile in message.Attachments)
{
if (attachmentFile.ODataType.ToLower() == ("#microsoft.graph.fileAttachment").ToLower())
{
var fileStream = new MemoryStream(attachmentFile.ContentBytes);
email.Attachments.Add(fileStream, attachmentFile.Name, -1, attachmentFile.IsInline, attachmentFile.Id);
}
else if (attachmentFile.ODataType.ToLower() == ("#microsoft.graph.itemAttachment").ToLower())
{
email.Attachments.Add(attachmentFile.Name, -1, attachmentFile.IsInline, attachmentFile.Id);
}
}
}
email.Save(@"E:\EmailMessages\email.msg");
解决方案
您需要在单独的请求中请求附件。
if (message.HasAttachments == true)
{
// Get attachment information.
var attachmentsInfo = await graphClient.Me.Messages[message.Id]
.Attachments
.Request()
.Select("id")
.GetAsync();
foreach (var attachmentFileInfo in attachmentsInfo)
{
if (attachmentFileInfo.ODataType.ToLower() == ("#microsoft.graph.fileAttachment").ToLower())
{
// Get the attachment bytes
var attachment = await graphClient.Me.Messages[message.Id]
.Attachments[attachmentFileInfo.Id]
.Request()
.GetAsync();
var fileStream = new MemoryStream(attachment.ContentBytes);
email.Attachments.Add(fileStream, attachment.Name, -1, attachment.IsInline, attachmment.Id);
}
else if (attachment.ODataType.ToLower() == ("#microsoft.graph.itemAttachment").ToLower())
{
email.Attachments.Add(attachment.Name, -1, attachment.IsInline, attachment.Id);
}
}
}
推荐阅读
- react-native - 按下按钮时打开覆盖组件
- windows - 普罗米修斯无法划分 2 个值
- python - 校准非对称拉普拉斯分布函数
- sql - 如何从 oracle 中的结果集中获取具有不同列值的记录?
- c# - 添加 JToken 时出现错误 Newtonsoft.Json.Linq.JProperty 不能有多个值
- hash - 如何确保散列函数不会为 2+ 个不同的条目生成相同的密码?
- wicket - 我怎样才能得到 wicket 1.4 中的 id 奇怪问题
- python - 在 .build() 和 .start() 之后无法获得 kivy 应用程序的屏幕
- sql-server - Powershell Invoke-Sqlcmd:从字符串转换日期和/或时间时转换失败
- python - 在 Django 通道中执行数据库查询