【问题标题】:Outlook Interop Folders "Disappearing"Outlook 互操作文件夹“消失”
【发布时间】:2013-08-13 02:31:02
【问题描述】:

在 Office365 中,我设置了一个共享邮箱,其中包含一个名为“公司日历”的日历,该日历可供需要访问公司日历的任何用户共享。我拥有邮箱的完全权限,所以它在 Outlook 中与我的邮箱一起打开。

我创建了一个 PowerShell 脚本,用于检查日历中的新条目或更改条目,然后向我发送一封包含详细信息的电子邮件。有时会因为找不到指定的文件夹而失败。

这三行执行良好:

Add-Type -assembly "Microsoft.Office.Interop.Outlook"
$Outlook = New-Object -comobject Outlook.Application
$namespace = $Outlook.GetNameSpace("MAPI")

这是间歇性失败的线路:

$current = $namespace.Folders.Item('Corporate Calendar').Folders.Item('Calendar').Folders.Item('Corp Calendar').Items

您可以看到它正在挖掘的结构:公司日历邮箱 > 日历 > 公司日历

这是 PowerShell 返回的错误:

Exception calling "Item" with "1" argument(s): "The attempted operation failed. An object could not be found." At C:\Users\aaldrich\desktop\Scripts\Calendar.ps1:72 char:1 
+ $current = $namespace.Folders.Item('Corporate Calendar').Folders.Item('Calendar' ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~ 
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : ComMethodTargetInvocation 

当它这样做时,我挖掘了命名空间,它似乎可以看到除公司日历邮箱之外的每个邮箱。重新启动 Outlook 可解决此问题。下次遇到这种情况,我再进去看看。

在检查新项目 ($namespace.SendAndReceive(1)) 之前,我还实现了发送/接收,但添加这并没有改变错误的频率。当日历被其他人编辑时,错误似乎最多发生,但这不是很一致。

目前脚本只向我发送电子邮件,并且还会向我发送包含任何错误的电子邮件。但最终,我希望它自动向所有人发送电子邮件。

不重要的旁注:你们中的一些人可能想知道“为什么不使用文件夹助手的公用文件夹?”原封不动地转发对我们的 Exchange 组织不起作用(MS 已经研究了几个月......)。作为附件转发以无法从手机查看的方式转发。标准转发对日历事件毫无用处。

谢谢!

编辑: 我只是让它再次失败。不幸的是,我能够再次运行失败的线路并且它工作得很好。那不是以前发生的事情。如果在我检查项目时正在进行发送/接收,会不会有这些问题?我已经给了它 15 秒来完成发送/接收...我会增加这个长度。

【问题讨论】:

    标签: powershell outlook office-interop


    【解决方案1】:

    您的代码假定邮箱“公司日历”已作为委托存储添加到用户的配置文件中。首先,邮箱名称可能不同(例如“CorpCaledar@mycompany.com”),其次它可能根本不存在。

    为什么不使用 Namespace.GetSharedDefaultFolder 从该邮箱打开默认日历文件夹?

    【讨论】:

    • 这个脚本只能在我的电脑上运行,所以可移植性不是问题。如果我运行此脚本并遇到我正在谈论的问题,我可以运行$namespace.Folders,它将返回 Outlook 中打开的每个邮箱,但“公司日历”邮箱除外。我不使用$namespace.GetSharedDefaultFolder,因为我要查找的日历不是共享邮箱中的默认日历。 (不过我可能误解了用法)
    • 如果代理邮箱在配置文件中,但您的代码找不到,很可能名称错误。 Outlook 对象模型仅允许从委托邮箱打开默认文件夹。要打开任何其他文件夹,您可以使用 Redemption (dimastr.com/redemption),它允许使用 RDOSession.GetSharedMailbox 打开整个邮箱。拥有 RDOStore 对象后,您可以深入到任何以 RDOStore.IPMRootFolder 开头的文件夹。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 2016-10-15
    相关资源
    最近更新 更多