簡體   English   中英

如何從Powershell腳本訪問Outlook電子郵件正文?

[英]How to access body of Outlook email messages from Powershell script?

我的前景中有一個基本文件夾,其中包含來自監視系統的警報。 我想基於該數據創建一個表。 為此,我一直試圖在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-可以將內容與消息分開存儲嗎?

根據MSDN文檔,我認為這確實是防病毒功能,它阻止通過對象模型保護程序訪問選擇性屬性。 這解釋了為什么$mm.Body屬性是可設置的,而不是gettable的原因 由於我無權訪問計算機上的任何公司安全設置,因此無法進一步尋求互操作性指導。

有一些解決方法建議

我想我將使用EWS,盡管我不得不說界面相當復雜。

感謝@TessellatingHeckler為我指明了道路。

使用以下代碼,您可以在名為“ 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

好吧,我的前景中有多個帳戶。 我稍微定制了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)用於獲取該用戶的收件箱文件夾。 尋找這些值對我來說是一個反復無常的嘗試,它可能因您而異,因此只需逐步並逐步運行代碼以獲取所需的用戶文件夾即可。 我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM