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)であることがわかります。したがって、ほとんどの電子メールはshould HTMLBodyにコンテンツが含まれています-いずれもありません。件名にはアクセスできますが、コンテンツにはアクセスできません。
オンラインで見つけたすべての例で本文のコンテンツを取得できるように見えるので、件名などをダウンロードするだけのOutlookの設定に違いないと思います。 Enterprise Vaultがあります-コンテンツをメッセージとは別に保存できますか?
次のコードを使用して、「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
MSDNドキュメント に基づくと、これは確かに、オブジェクトモデルガードを介した選択的なプロパティへのアクセスをブロックするアンチウイルスであると思います。これは、$mm.Body
プロパティは 設定可能ですが取得可能ではありません 。自分のマシンの企業のセキュリティ設定にアクセスできないため、相互運用の方向性をこれ以上追求できませんでした。
いくつかあります 回避策の提案
インターフェースはかなり複雑だと言わざるを得ませんが、私はEWSで作業するつもりだと思います。
@TessellatingHecklerに、私を道に導いてくれてありがとう。
ええと、私はOutlookに複数のアカウントを持っています。 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)はそのユーザーの受信ボックスフォルダーを取得するためのものです。これらの値を見つけるのは私にとってすべての試行錯誤です。それはあなたによって異なる可能性があるので、コードをステップバイステップで部分的に実行して、ユーザーの目的のフォルダーを取得します。これがお役に立てば幸いです。