我想使用PowerShell读取Outlook邮箱。我可以使用MAPI API调用访问Outlook邮箱,但只能连接到计算机上现有/预配置的Outlook /profile。我的要求是,我需要在运行时连接到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发布于 2019-08-02 13:34:44
首先,这不是MAPI:您只需将字符串"MAPI“传递给Application.GetNamespace调用--这是Outlook。它只允许您访问预配置的本地配置文件中的邮箱。如果存在多个本地配置文件,并且Outlook未运行,则可以将配置文件的名称(如控制面板的“邮件显示概要文件”中所示)传递给Namespace.Logon。如果Outlook已经在运行,Namespace.Logon什么也不会做。如果配置文件中的主邮箱有权访问同一Exchange中的其他邮箱,则可以使用Namespace.CreateRecipient / Namespace.GetSharedDefaultFolder访问其他邮箱的默认文件夹。
如果您希望在没有现有Outlook配置文件的情况下真正动态访问任意邮箱,可以:
LogonHostedExchangeMailbox方法(RDOSession对象大致对应于Outlook中的名称空间对象)。LogonHostedExchangeMailbox创建(然后删除)指向指定邮箱的临时配置文件。发布于 2019-08-02 13:36:22
目前,您正在处理的是Outlook对象模型,而不是MAPI。
Outlook是单例,不能同时在系统上运行两个实例。因此,当您创建一个新的Application实例时,您将被链接到已经运行的实例。请注意,您需要在相同的安全上下文中运行两个应用程序。
注意,Microsoft目前不建议也不支持来自任何无人值守、非交互式客户端应用程序或组件(包括ASP、ASP.NET、DCOM和NT服务)的Microsoft应用程序的自动化,因为在此环境中运行Office时,Office可能会出现不稳定的行为和/或死锁。
如果您正在构建在服务器端上下文中运行的解决方案,则应尝试使用已为无人值守执行而安全的组件。或者,您应该尝试找到允许至少部分代码运行客户端的替代方案。如果您使用来自服务器端解决方案的Office应用程序,则该应用程序将缺乏许多成功运行所需的功能。此外,您将承担风险与您的整体解决方案的稳定性。在办公服务器端自动化的几点思考文章中阅读更多有关这方面的内容。
作为解决办法,您可以考虑使用Open,如果您只处理Exchange,请参阅开始在Exchange中使用web服务获取更多信息。
https://stackoverflow.com/questions/57325981
复制相似问题