C# 如何使用带运行时用户帐户的PowerShell读取Outlook邮箱
我想使用PowerShell读取Outlook邮箱。我可以使用MAPI API调用访问Outlook邮箱,但只能使用计算机上现有/预配置的Outlook ID/配置文件进行连接。我的要求是,我需要在运行时连接到Outlook邮箱 我正在使用PowerShell版本5 导入部件文件C# 如何使用带运行时用户帐户的PowerShell读取Outlook邮箱,c#,powershell,mapi,C#,Powershell,Mapi,我想使用PowerShell读取Outlook邮箱。我可以使用MAPI API调用访问Outlook邮箱,但只能使用计算机上现有/预配置的Outlook ID/配置文件进行连接。我的要求是,我需要在运行时连接到Outlook邮箱 我正在使用PowerShell版本5 导入部件文件 Add-Type -assembly "Microsoft.Office.Interop.Outlook" $Outlook = New-Object -comobject Outlook.Appl
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
首先,这不是MAPI:只需将字符串“MAPI”传递给
应用程序.GetNamespace
调用-这是Outlook对象模型。它只允许您访问预配置本地配置文件中的邮箱。如果有多个本地配置文件且Outlook未运行,则可以将配置文件的名称(如控制面板| Mail | Show profiles中所示)传递到名称空间。登录
。如果Outlook已在运行,Namespace.Logon
将不会执行任何操作。如果配置文件中的主邮箱有权访问同一Exchange组织中的其他邮箱,则可以使用Namespace.CreateRecipient
/Namespace.GetSharedDefaultFolder
访问其他邮箱的默认文件夹
如果要在没有现有Outlook配置文件的情况下真正动态访问任意邮箱,可以:
LogonHostedExchangeMailbox
方法(对象大致对应于Outlook对象模型中的名称空间对象)。LogonHostedExchangeMailbox创建(然后删除)指向指定邮箱的临时配置文件李>
当前,您处理的是Outlook对象模型,而不是MAPI Outlook是单机版,不能同时在系统上运行两个实例。因此,当您创建一个新的
应用程序实例时,您将链接到已经运行的实例。请注意,您需要在相同的安全上下文下运行这两个应用程序
注意,Microsoft目前不建议也不支持从任何无人参与、非交互式客户端应用程序或组件(包括ASP、ASP.NET、DCOM和NT服务)自动化Microsoft Office应用程序,因为Office在此环境中运行时,可能会表现出不稳定的行为和/或死锁
如果您正在构建一个在服务器端上下文中运行的解决方案,那么您应该尝试使用安全的组件来无人值守地执行。或者,您应该尝试找到至少允许部分代码在客户端运行的替代方案。如果使用服务器端解决方案中的Office应用程序,该应用程序将缺少许多成功运行所需的功能。此外,您将面临整体解决方案稳定性方面的风险。在文章中阅读更多关于这方面的内容
作为一种解决方案,如果您只处理Exchange帐户,可以考虑使用OpenXMLSDK,请参阅更多信息。p>