1

我最近发布了一个关于在发送电子邮件后保存电子邮件的问题 - 除了一个小细节外,我几乎所有工作都正常。基本上,我能够在它发送之前捕获一封电子邮件,并用它做任何我想做的事情——在我的情况下,保存它。但是,如果您尝试访问该电子邮件的 CreationTime 属性,它会返回 4501 年 1 月 1 日凌晨 12 点。这很可能是因为它实际上还没有被“创建”,因为一旦我的代码完成执行并实际发送,它将在“已发送项目”文件夹中创建。

我想让这个即将发送的 MailItem 保持不变。我想复制它,将副本的 CreationTime 属性更改为 DateTime.Now,然后保存副本,然后让 Outlook 继续发送原件。但是,当我尝试修改 CreationTime 时,我收到一个错误,指出该属性是只读的。有没有办法“闯入”它?或者有什么方法可以强制写入或其他什么?

4

1 回答 1

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 资源处理和错误处理。

于 2012-08-20T18:18:18.797 回答