MailItem.CreationTime是只读的 - 任何解决方法?

时间:2012-08-20 17:46:20

标签: c# outlook outlook-addin

我最近发布了一个关于在发送电子邮件后保存电子邮件的question - 除了一个小细节外,我几乎所有工作都在运行。基本上,我能够在它发送之前收到一封电子邮件,并用它做我想做的任何事情 - 就我而言,保存它。但是,如果您尝试访问该电子邮件的CreationTime属性,它将在凌晨12点返回1月1日4501。这很可能是因为它实际上还没有“创建”,因为只要我的代码完成执行并且实际发送它就会在Sent items文件夹中创建它。

我想留下即将发送的MailItem,不受影响。我想复制它,将副本的CreationTime属性更改为DateTime.Now,然后保存副本,然后允许Outlook继续发送原始。但是,当我尝试修改CreationTime时,我收到一个错误,即该属性是只读的。有没有办法“闯入”它?或任何强迫写或其他什么方式?

1 个答案:

答案 0 :(得分:1)

更好的方法是附加到已发送的项目Folder.ItemAdd,这样您就可以在发送消息后保存消息,而不是之前保存消息 - 这样您的MailItem.CreationTime应该准确无误。这可能是也可能不是你的选择,但可以缓解这个问题。

Outlook.Folder sentItems = ThisAddIn.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail) as Outlook.Folder;
sentItems.Items.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(sentItems_ItemAdd);
// ...
void sentItems_ItemAdd(object Item)
{
  var msg = Item as Outlook.MailItem;
  msg.SaveAs(yourPath, Outlook.OlSaveAsType.olMSG);
}

注意: 您需要处理正确的COM资源处理和错误处理。