【问题标题】:MailItem.CreationTime is Read Only - Any Workarounds?MailItem.CreationTime 是只读的 - 任何解决方法?
【发布时间】:2015-12-30 02:27:54
【问题描述】:

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

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

【问题讨论】:

  • 是否有需要更改创建时间的原因..?
  • 是的,当我将它保存到磁盘时,文件的创建时间设置为 MailItem 中的创建时间。我想我可以先保存电子邮件,然后修改结果文件的 CreationTime 而不是在代码中进行,但这似乎很混乱……尽管显然使用反射来更改只读属性更混乱?
  • 只读属性就是这样......除非你了解反射,否则查看 MUG4N 的链接我看不出乱七八糟的地方......你需要更改该链接中的示例以适应你的用例

标签: c# outlook outlook-addin


【解决方案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 资源处置和错误处理。

【讨论】:

  • 嗯,我更喜欢你的方法。但是,当我实现它时,我收到以下错误 - “非静态字段、方法或属性‘add-in-name.ThisAddIn.Application’需要对象引用
  • 如果您将此代码放在ThisAddIn.cs 中,请尝试使用Globals.ThisAddInthis
  • 好的,这将错误稍微降低了,但仍然是一个小问题(感谢您迄今为止的所有帮助!),基本上首先 Visual Studio 告诉我没有 .ItemAdd,所以我搞砸了使用 Intellisense 给我的其他选项,发现 SentItems.Items.ItemAdd 工作正常。我编辑了您的代码以反映这一点。无论如何,现在我得到了 Microsoft.Office.Interop.Outlook 中不存在 ItemEvents_ItemAddEventHandler 的错误。它应该存在于另一个地方吗?
  • 此页面:msdn.microsoft.com/en-us/library/… 似乎说我应该能够使用 ItemEvents_Event.ItemAdd,尽管使用它时我收到错误消息,指出 Microsoft.Office.Interop.Outlook 类型中不存在 ItemAdd .ItemEvents_Event
  • 看起来你拼错了..应该是ItemsEvents_Event.ItemAddItemsEvents_ItemAddEventHandlerMicrosoft.Office.Interop.Outlook.dll 范围内
猜你喜欢
  • 1970-01-01
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-21
  • 1970-01-01
相关资源
最近更新 更多