【问题标题】:Using Outlook interop, how can I save an attached .msg that's open in Inspector?使用 Outlook 互操作,如何保存在 Inspector 中打开的附加 .msg?
【发布时间】:2021-09-25 07:49:07
【问题描述】:

我正在开发一个将活动邮件项保存到文件系统的 Outlook 插件按钮。

除了.msg 附件,它工作正常:

当用户双击 message.msg 时,会打开一个新的 Outlook 检查器窗口,显示该电子邮件。

接下来,用户单击我的加载项按钮将该电子邮件保存到文件系统。此时抛出异常:

System.UnauthorizedAccessException: '您没有执行此操作的适当权限。'

如何将附件中的电子邮件从 Inspector 窗口保存到文件系统?

【问题讨论】:

  • 您的代码的哪个留置权引发了该异常?
  • @DmitryStreblechenko mailItem.SaveAs。它适用于副本(相同的文件系统路径)。

标签: c# outlook outlook-addin office-interop


【解决方案1】:

TL;DR:使用mailItem.Copy().SaveAs()

问题是附加的电子邮件是只读的。出于某种原因,interop 禁止在只读电子邮件上调用 SaveAs

如果您调用Copy(),邮件项的新实例不是只读的,可以毫无问题地保存到磁盘。

注意:在复制邮件项目之前,请检查它是否真的是只读的,因为根据邮件项目的大小,复制可能会很慢。使用GetProperty 来确定这一点; MailItem 不幸的是没有内置 ReadOnly 属性。

bool isMailItemReadOnly = mailItem.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x0FF70003") == 0;
string path = @"C:\MyFolder\message.msg";

if (isMailItemReadOnly)
{
    mailItem.Copy().SaveAs(path);
}
else
{
    mailItem.SaveAs(path);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 2021-10-19
    相关资源
    最近更新 更多