是否可以使用Microsoft Graph创建具有不同发送/接收日期的消息?

问题描述 投票:0回答:1

我正在开发一个应用程序,该应用程序必须能够将具有特定日期的消息插入O365邮箱(类似于邮件迁移)。我使用IMAP和MailKit创建了一个版本,这是在消息对象上设置date属性的简单问题:

MimeMessage message = new MimeMessage();
message.From.Add(new MailboxAddress(NameGenerator.AnyName(), EmailAddressGenerator.AnyEmailAddress()));
message.To.Add(new MailboxAddress(m_O365UserID));
message.Subject = StringGenerator.AnyStringOfSizeAndCase(NumberGenerator.RandomNumberBetween(20, 100), CaseType.TitleCase);
BodyBuilder builder = new BodyBuilder
{
    HtmlBody = LipsumGenerator.GenerateHtml(NumberGenerator.RandomNumberBetween(3, 10))
};
message.Body = builder.ToMessageBody();
DateTime t = DateTimeGenerator.AnyDateBetween(m_startDate, DateTime.Now);
t = t.Add(DateTimeGenerator.AnyTime());
DateTimeOffset dto = new DateTimeOffset(t);
message.Date = dto;

过去我也可以使用EWS做到这一点,但是我需要设置一些扩展属性来做到这一点,例如:

        ExtendedPropertyDefinition deliveryTime = new Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(0x0E06, MapiPropertyType.SystemTime);
        ExtendedPropertyDefinition clientSubmitTime = new Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(0x0039, MapiPropertyType.SystemTime);
        ExtendedPropertyDefinition flags = new Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(3591, MapiPropertyType.Integer);
EmailMessage m = new EmailMessage(m_exchangeService);
m.From = EmailAddressGenerator.AnyEmailAddress();
m.ToRecipients.Add(m_emailAddress);
DateTime t = DateTimeGenerator.AnyDateBetween(startDate, DateTime.Now);
t = t.Add(DateTimeGenerator.AnyTime());
m.SetExtendedProperty(deliveryTime, t);
m.SetExtendedProperty(clientSubmitTime, t);
m.SetExtendedProperty(flags, 1);

这两种方法都可以将消息回溯到我需要的任何时间。在这种情况下,我只是在邮箱中填充测试数据以验证API调用。试图在图形中做同样的事情:

                Microsoft.Graph.Message message = new Microsoft.Graph.Message();
                message.From = new Recipient { EmailAddress = new EmailAddress { Address = EmailAddressGenerator.AnyEmailAddress(), Name = NameGenerator.AnyName() } };
                message.ToRecipients = new List<Recipient>();
                message.ToRecipients.Append(new Recipient { EmailAddress = new EmailAddress { Address = m_O365UserID } });
                message.Subject = StringGenerator.AnyStringOfSizeAndCase(NumberGenerator.RandomNumberBetween(20, 100), CaseType.TitleCase);

                DateTime t = DateTimeGenerator.AnyDateBetween(m_startDate, DateTime.Now);
                t = t.Add(DateTimeGenerator.AnyTime());
                DateTimeOffset dto = new DateTimeOffset(t);

                message.ReceivedDateTime = dto;
                message.SentDateTime = dto;
                message.CreatedDateTime = dto;
                message.LastModifiedDateTime = dto;

为邮件的提交时间加上时间戳。我以为我需要在消息上设置与EWS相同的Mapi属性,但是到目前为止,我还没有找到一种方法来做到这一点。我查看了概述的here扩展属性,该属性表示可以通过类型和MAPI属性标记进行引用。 This page说可以在新对象上创建扩展属性:

要在新资源实例中创建一个或多个扩展属性,请使用与创建实例相同的REST请求,并将新资源实例的属性和扩展属性包括在请求主体中。

我尝试过这样:

                Dictionary<string, object> extendedProperties = new Dictionary<string, object>();
                extendedProperties.Add("SystemTime 0x0E06",dto.DateTime);
                extendedProperties.Add("SystemTime 0x0039", dto.DateTime);
                extendedProperties.Add("Integer 0x3591",1);

                message.Body = new ItemBody { ContentType = BodyType.Html, Content = LipsumGenerator.GenerateHtml(NumberGenerator.RandomNumberBetween(3, 10)), AdditionalData=extendedProperties};

哪个抛出异常:

属性'SystemTime 0x0E06'在类型'Microsoft.OutlookServices.ItemBody'上不存在。确保仅使用由类型定义的属性名称,或将类型标记为开放类型。

我也无法直接在message.SingleValueExtendedProperties上创建任何内容,如果我省略SystemTime并尝试将属性设置为十六进制值,则会发生相同的异常。我希望能够为此应用程序支持Graph-是否有人知道用自定义发送/接收日期创建消息的任何方式?如果我能够在EWS中做到这一点,我希望较新的API应该能够做到同样的事情。

microsoft-graph microsoft-graph-mail
1个回答
0
投票

您应该可以执行类似的操作

        Microsoft.Graph.Message message = new Microsoft.Graph.Message();
        message.From = new Recipient { EmailAddress = new EmailAddress { Address = "[email protected]", Name = "blah" } };
        message.ToRecipients = new List<Recipient>() { new Recipient { EmailAddress = new EmailAddress { Address = "[email protected]" } } };
        message.Subject = "Blah";
        message.SingleValueExtendedProperties = new MessageSingleValueExtendedPropertiesCollectionPage()
        {
            new SingleValueLegacyExtendedProperty {Id = "Integer 0x0E07",Value = "1" },
            new SingleValueLegacyExtendedProperty {Id = "SystemTime 0x0039", Value = "2020-05-12T10:10:47.2048+10:00" },
            new SingleValueLegacyExtendedProperty {Id = "SystemTime 0x0E06",Value = "2020-05-12T10:10:47.2048+10:00" }
        };
        var SaveMessage = graphClient.Me.MailFolders["Inbox"].Messages.Request().AddAsync(message).Result;

为我工作好吗

© www.soinside.com 2019 - 2024. All rights reserved.