首页 > 解决方案 > 如何通过运行时用户帐户使用 PowerShell 读取 Outlook 邮箱

问题描述

我想使用 PowerShell 读取 Outlook 邮箱。我可以使用 MAPI API 调用访问 Outlook 邮箱,但我只能连接机器上现有/预配置的 Outlook ID/配置文件。我的要求是,我需要在运行时连接到 Outlook 邮箱。

我正在使用 PowerShell 版本 5。

导入装配文件

Add-Type -assembly "Microsoft.Office.Interop.Outlook"
$Outlook = New-Object -comobject Outlook.Application

映射命名空间

$namespace = $Outlook.GetNameSpace("MAPI")

访问收件箱

$OutlookInbox = $Outlook.Session.GetDefaultFolder(6)
$OutlookFolders = ($Outlook.Session.Folders.Item(1).Folders.Item(2)).FullFolderPath

标签: c#powershellmapi

解决方案


首先,这不是 MAPI:您只需将字符串“MAPI”传递给Application.GetNamespace调用 - 这是 Outlook 对象模型。它只允许您访问预先配置的本地配置文件中的邮箱。如果有多个本地配置文件并且 Outlook 未运行,您可以将配置文件的名称(如控制面板 | 邮件 | 显示配置文件中所示)传递给Namespace.Logon. 如果 Outlook 已在运行,Namespace.Logon则不会执行任何操作。如果配置文件中的主邮箱有权访问同一Exchange 组织中的其他邮箱,您可以使用Namespace.CreateRecipient/Namespace.GetSharedDefaultFolder访问其他邮箱的默认文件夹。

如果您想在没有现有 Outlook 配置文件的情况下真正动态访问任意邮箱,您可以:

  1. 使用 EWS 库 - 可从 PS 访问:请参阅https://blogs.msdn.microsoft.com/webdav_101/2018/06/19/about-using-ews-and-powershell/
  2. 可以使用扩展 MAPI 创建和配置临时配置文件(请参阅https://blogs.msdn.microsoft.com/dvespa/2015/10/28/how-to-configure-an-outlook-2016-profile-using-mfcmapi / ),但只能从 C++ 或 Delphi 访问扩展 MAPI。
  3. 您可以使用Redemption - 它公开RDOSessionLogonHostedExchangeMailbox方法(RDOSession对象大致对应 Outlook 对象模型中的 Namespace 对象)。LogonHostedExchangeMailbox 创建(然后删除)指向指定邮箱的临时配置文件。

推荐阅读