【问题标题】:How to read Outlook mailbox using PowerShell with runtime user account如何通过运行时用户帐户使用 PowerShell 读取 Outlook 邮箱
【发布时间】:2019-08-02 11:52:23
【问题描述】:

我想使用 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# powershell mapi


    【解决方案1】:

    首先,这不是 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 - 它公开了RDOSession.LogonHostedExchangeMailbox 方法(RDOSession 对象大致对应于 Outlook 对象模型中的命名空间对象)。 LogonHostedExchangeMailbox 创建(然后删除)指向指定邮箱的临时配置文件。

    【讨论】:

      【解决方案2】:

      目前,您处理的是 Outlook 对象模型,而不是 MAPI。

      Outlook 是单例的,您不能同时在系统上运行两个实例。因此,当您创建一个新的 Application 实例时,您将链接到已经运行的实例。请注意,您需要在相同的安全上下文下运行这两个应用程序。

      请注意,Microsoft 当前不推荐也不支持任何无人值守、非交互式客户端应用程序或组件(包括 ASP、ASP.NET、DCOM 和 NT 服务)的 Microsoft Office 应用程序自动化,因为 Office 可能在此环境中运行 Office 时表现出不稳定的行为和/或死锁。

      如果您要构建在服务器端上下文中运行的解决方案,您应该尝试使用已确保无人值守执行安全的组件。或者,您应该尝试找到允许至少部分代码在客户端运行的替代方案。如果您使用服务器端解决方案中的 Office 应用程序,该应用程序将缺少许多成功运行所需的功能。此外,您将承担整体解决方案稳定性的风险。在Considerations for server-side Automation of Office 文章中阅读更多相关信息。

      作为一种解决方法,如果您只处理 Exchange 帐户,则可以考虑使用 Open XML SDK,有关详细信息,请参阅Start using web services in Exchange

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 2018-03-10
        • 1970-01-01
        • 2014-05-19
        • 2020-02-26
        • 1970-01-01
        相关资源
        最近更新 更多