c# - 如何通过运行时用户帐户使用 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
解决方案
首先,这不是 MAPI:您只需将字符串“MAPI”传递给Application.GetNamespace
调用 - 这是 Outlook 对象模型。它只允许您访问预先配置的本地配置文件中的邮箱。如果有多个本地配置文件并且 Outlook 未运行,您可以将配置文件的名称(如控制面板 | 邮件 | 显示配置文件中所示)传递给Namespace.Logon
. 如果 Outlook 已在运行,Namespace.Logon
则不会执行任何操作。如果配置文件中的主邮箱有权访问同一Exchange 组织中的其他邮箱,您可以使用Namespace.CreateRecipient
/Namespace.GetSharedDefaultFolder
访问其他邮箱的默认文件夹。
如果您想在没有现有 Outlook 配置文件的情况下真正动态访问任意邮箱,您可以:
- 使用 EWS 库 - 可从 PS 访问:请参阅https://blogs.msdn.microsoft.com/webdav_101/2018/06/19/about-using-ews-and-powershell/
- 可以使用扩展 MAPI 创建和配置临时配置文件(请参阅https://blogs.msdn.microsoft.com/dvespa/2015/10/28/how-to-configure-an-outlook-2016-profile-using-mfcmapi / ),但只能从 C++ 或 Delphi 访问扩展 MAPI。
- 您可以使用Redemption - 它公开RDOSession。
LogonHostedExchangeMailbox
方法(RDOSession对象大致对应 Outlook 对象模型中的 Namespace 对象)。LogonHostedExchangeMailbox 创建(然后删除)指向指定邮箱的临时配置文件。
推荐阅读
- linux - 如果满足条件,在重新启动后自动启动 Linux 服务时出错:“条件中的路径不是绝对的,忽略”
- ios - 缓存 Firebase 视频网址时,URLSession 移动缓慢
- javascript - 从另一个文件客户端导入函数
- c - 从链表中删除元素的函数的时间复杂度是多少?
- java - Spring batch - JdbcPagingItemReader, SQLServerException: 列名 XYZ 无效
- graph - TeX 中的条形图格式不正确
- python-2.7 - 无法使用 Pycharm 安装 arcpy 模块
- amazon-web-services - 如何通过 Boto3 API 在 AWS 中添加弹性 IP 名称?
- android - 尝试初始化 Activity Android 时,Robolectric 出现类型不匹配错误
- javascript - React 中由 ref jumpy 链接的滚动框/条(尤其是移动端)