首页 > 解决方案 > 将对象保存为 .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");

标签: c#microsoft-graph-sdks

解决方案


您需要在单独的请求中请求附件。

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);
        }
    }
}

推荐阅读