【发布时间】:2016-11-25 15:25:32
【问题描述】:
我的 Outlook 中有一个基本文件夹,其中包含来自监控系统的警报。我想根据该数据创建一个表。为此,我一直在尝试在 Outlook 中访问电子邮件的正文内容:
Add-Type -Assembly "Microsoft.Office.Interop.Outlook"
$Outlook = New-Object -ComObject Outlook.Application
$namespace = $Outlook.GetNameSpace("MAPI")
$inbox = $namespace.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderInbox)
$inbox.Items | Format-Table BodyFormat, Body, HTMLBody, RTFBody
现在我希望看到一些 Body、HTMLBody 或 RTFBody 的内容——我没有。我确实看到 BodyFormat 通常是 2 (olFormatHTML)。所以大多数电子邮件应该在 HTMLBody 中有内容——它们都没有。我可以访问主题行,但不能访问内容。
由于我在网上找到的每个示例似乎都可以获取正文内容,我认为它必须是 Outlook 中的设置,只能下载主题行或其他内容。我们有 Enterprise Vault——内容可以与邮件分开存储吗?
【问题讨论】:
-
所以如果我将 $mm 设置为第一条消息
$mm=$inbox.items.getfirst(),那么我可以看到$mm.downloadstate是 1,这应该意味着完全下载。 - 所以我不认为前景只是获得主题行。$mm.body和$mm.HTMLBody仍然是空的。 -
$mm.GetInspector.EditorType返回 4 或 (olEditorWord)。但这似乎并没有导致任何地方。我可以设置正文$mm.body="this is a test"-- 但$mm.body仍然为空,但消息显示在 Outlook 中。 -
在这里为我工作,列出电子邮件正文内容。我觉得您的问题不是 PowerShell,而是您设置中的其他地方。有点,但它可能是一个防病毒/反恶意软件客户端阻止脚本访问 Outlook 吗?有什么方法可以通过 Exchange Web Access(或 Exchange Web 服务)而不是 Outlook 来通过脚本访问邮箱?
-
我认为你是对的,我认为有一些东西阻塞了 COM 接口 - 但是我找不到有关此类功能的文档。我的另一个理论是版本——当我在没有打开 Outlook 的情况下运行脚本时,然后尝试打开 Outlook,它告诉我“正在运行另一个版本的 Outlook……”所以——也许是我无法访问某些 COM 对象的原因是加载的库 Powershell 比安装的 Outlook 版本新/旧。也许吧。
-
嗯,大会说版本是 14.0.0.0,应该是 Outlook 2010。为了安全起见,我尝试了 32 位和 64 位 PowerShell 模块。我也尝试以管理员身份运行。没有变化。
标签: email powershell outlook outlook-2010