Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用带运行时用户帐户的PowerShell读取Outlook邮箱_C#_Powershell_Mapi - Fatal编程技术网

C# 如何使用带运行时用户帐户的PowerShell读取Outlook邮箱

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

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

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

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

  • 使用EWS库-可从PS访问:请参阅
  • 可以使用扩展MAPI(参见)创建和配置临时配置文件,但扩展的MAPI只能从C++或Delphi访问。
  • 您可以使用-它公开。
    LogonHostedExchangeMailbox
    方法(对象大致对应于Outlook对象模型中的名称空间对象)。LogonHostedExchangeMailbox创建(然后删除)指向指定邮箱的临时配置文件
    当前,您处理的是Outlook对象模型,而不是MAPI

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

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

    如果您正在构建一个在服务器端上下文中运行的解决方案,那么您应该尝试使用安全的组件来无人值守地执行。或者,您应该尝试找到至少允许部分代码在客户端运行的替代方案。如果使用服务器端解决方案中的Office应用程序,该应用程序将缺少许多成功运行所需的功能。此外,您将面临整体解决方案稳定性方面的风险。在文章中阅读更多关于这方面的内容

    作为一种解决方案,如果您只处理Exchange帐户,可以考虑使用OpenXMLSDK,请参阅更多信息。p>