我的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 - 内容是否可以与消息分开存储?
答案 0 :(得分:1)
基于MSDN documentation我相信这确实是通过对象模型防护来阻止对选择性属性的访问。这解释了$mm.Body
属性为settable but not gettable的原因。由于我无法访问我机器上的任何公司安全设置,因此我无法继续寻求互操作方向。
我想我会与EWS合作,虽然我不得不说界面相当复杂。
感谢@TessellatingHeckler指出我的路径。
答案 1 :(得分:1)
使用以下代码,您可以在名为" mailFolder"。
的文件中访问未读邮件的正文。$OL=New-Object -ComObject OUTLOOK.APPLICATION
$ns =$OL.GETNAMESPACE("MAPI")
[string]$Folder ="mailFolder"
$mail = $ns.Folders.Item(1).Folders.Item($Folder).Items.Restrict('[UnRead] = True')
$mail | Select-Object -Property Body | Format-List
答案 2 :(得分:0)
好吧,我的前景中有多个帐户。我稍微定制了MahmutKarali先生共享的代码,它对我有用。另外,该代码仅在PowerShell的非管理员模式下运行。之后,我必须允许在桌面上的Outlook应用程序中访问10分钟。
$ol = New-Object -ComObject Outlook.Application
$ol.Session.Logon("Outlook")
$ns = $ol.GetNamespace("MAPI")
$mail = $ns.Folders.Item(3).Folders.Item(2).Items.Restrict('[UnRead] = True')
$mail | Select-Object -Property Body | Format-List
此处Item(3)用于从配置文件中获取特定用户,Item(2)用于获取该用户的收件箱文件夹。寻找这些值对我来说是一个反复无常的尝试,它可能因您而异,因此只需逐步并逐步运行代码以获取所需的用户文件夹即可。我希望这会有所帮助。