C# 使用PropertyAccessor.SetProperty方法设置Outlook邮件项属性时出现问题

C# 使用PropertyAccessor.SetProperty方法设置Outlook邮件项属性时出现问题,c#,email,datetime,outlook,C#,Email,Datetime,Outlook,目前,我正在将System.Net.Mail.MailMessage对象转换为Microsoft.Office.Interop.Outlook.MailItem对象。 一切似乎都正常,但我需要帮助通过PropertyAccessor.SetProperty()方法设置SentOnMailItem属性 我读取MailMessage头中的发送日期信息,该信息返回一个string对象,然后将其转换为DateTime,最后使用SetProperty()方法保存此信息 这是我的密码: MailMessag

目前,我正在将
System.Net.Mail.MailMessage
对象转换为
Microsoft.Office.Interop.Outlook.MailItem
对象。 一切似乎都正常,但我需要帮助通过
PropertyAccessor.SetProperty()
方法设置
SentOn
MailItem属性

我读取MailMessage头中的发送日期信息,该信息返回一个string对象,然后将其转换为DateTime,最后使用SetProperty()方法保存此信息

这是我的密码:

MailMessage mMessage= MailMessageMimeParser.ParseMessage(emlFilePath);
eMail = (Outlook.MailItem)application.CreateItem(Outlook.OlItemType.olMailItem);
//  here I set 'Subject', 'To', 'CC', 'BCC' etc. properties...
// then try to set the 'SentOn' property
string sentOnString = mMessage.Headers["Date"]; // Wed, 27 May 2015 10:54:39 +0200
DateTime sentOnDateTime = DateTime.SpecifyKind(DateTime.Parse(sentOnString), DateTimeKind.Local); // 5/27/2015 10:54:39 AM
string PR_CLIENT_SUBMIT_TIME = "http://schemas.microsoft.com/mapi/proptag/0x00390040";
eMail.PropertyAccessor.SetProperty(PR_CLIENT_SUBMIT_TIME, sentOnDateTime);
eMail.Save(); // here the SentOn property is  5/27/2017 12:54:39 PM
DateTime date = (DateTime)eMail.PropertyAccessor.GetProperty(PR_CLIENT_SUBMIT_TIME); // 5/27/2015 10:54:39 AM
...
return eMail; // here the SentOn property is  5/27/2017 12:54:39 PM
正如我的代码注释所示,当我使用
PropertyAccessor.GetProperty()
方法获取时,正确/良好的日期值(2015年5月27日10:54:39 AM)似乎存储在电子邮件项目中,但如果我尝试从
eMail.SentOn
属性获取它,则我会得到错误的日期值(2017年5月27日12:54:39 PM)

我还尝试使用此指令创建
sentOnDateTime
DateTime
DateTime sentOnDateTime=DateTime.Parse(“Wed,2015年5月27日10:54:39”)但结果不变

你有什么建议?有什么提示吗?谢谢。

尝试使用or值作为方法的第二个参数


无论您是否使用DateTimeKind.Local—datetime值中没有任何东西固有地使其成为本地或UTC。所有SetProperty看到的是一个8字节的浮点值,在COM中抑制DateTime

MAPI将大多数PT_系统时间属性存储在UTC时区中,这是您需要传递给SetProperty的。SentOn属性在读取UTC时将其转换为本地时间

作为旁注,更大的问题将是Sent属性-OOM不允许您设置它,因此您需要创建一个post项而不是mail项,然后将MessageClass更改回“IPM.note”并删除PR_图标索引

如果使用是一个选项,它将允许您使用.import方法导入MIME文件:

  set Session = CreateObject("Redemption.RDOSession")
  Session.MAPIOBJECT = Application.Session.MAPIOBJECT
  set Msg = Session.GetDefaultFolder(olFolderInbox).Items.Add
  Msg.Sent = true
  Msg.Import "C:\temp\test.eml", 1024
  Msg.Save

听起来像是UTC的问题。这些
DateTime
值的
种类是什么?也许您需要使用
ToLocalTime()
ToUniversalTime
?当我创建
sentOnDateTime
时,我指定
DateTimeKind.Local
值。我也尝试过使用
DateTimeKind.Unspecified
值,但问题仍然存在。这并不能解决我的问题,“SentOn”DateTime属性仍然等于“5/27/2017 12:54:39 PM”,如果我使用“Utc”或“Unspecified”值。。。
  set Session = CreateObject("Redemption.RDOSession")
  Session.MAPIOBJECT = Application.Session.MAPIOBJECT
  set Msg = Session.GetDefaultFolder(olFolderInbox).Items.Add
  Msg.Sent = true
  Msg.Import "C:\temp\test.eml", 1024
  Msg.Save