使用 powershell 访问 EWS 上的 Inbox 和 SentItems 文件夹

Posted

技术标签:

【中文标题】使用 powershell 访问 EWS 上的 Inbox 和 SentItems 文件夹【英文标题】:Accessing Inbox and SentItems folder on EWS using powershell 【发布时间】:2017-06-06 14:49:16 【问题描述】:

我正在通过 PowerShell 代码处理一些 EWS。我似乎无法同时访问已发送邮件和收件箱文件夹。

这是我的代码:

$ewsPath = "C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll"
Add-Type -Path $ewsPath
$ews = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService -ArgumentList "Exchange2013"
$ews.Credentials = New-Object Net.NetworkCredential('emailbox', 'password')
$ews.AutodiscoverUrl("emailbox@domain.com")
$inbox = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($ews,[Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox)
$sentbox = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($ews,[Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::SentItems)
$iv = New-object Microsoft.Exchange.WebServices.Data.ItemView -ArgumentList 10000                                         
$pvSet = New-object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties)                                               
$sentItems = $sentbox.FindItems($iv)

当我想在 sentbox 变量中获取已发送邮件文件夹时,我收到以下错误:

使用“2”参数调用“绑定”时出现异常:“请求 失败的。远程服务器返回错误:(501)未实现。

但是如果我在 $inbox 和 $sentbox 初始化之间有以下行,它可以工作,但是 $sentbox 上的 findItems 失败。

$ews.AutodiscoverUrl("emailbox@domain.com")

【问题讨论】:

您能否发布您使用的整个代码,例如您收到的错误是针对 FindItems 的,而您在执行 Bind (GetItem) 时发布的代码与此无关,因此您必须在其中运行其他代码发生错误 抱歉,copypasta 有问题,因为我还在调试。所以问题是我的 $sentbox 上的绑定失败了。但是,如果我在第二次绑定之前重做 discoverurl(),$sentitems 绑定有效,但 findItems 仍然失败。 自动发现所做的只是填充 server.url 值,一旦发现就不应更改。您可能想要启用跟踪并查看发送到服务器的请求,例如 $service.TraceEnabled = $true 。我也会给 ewseditor ewseditor.codeplex.com 一个机会,只需单击收件箱,然后发送的项目将与您的代码尝试使用相同的底层 dll 等执行完全相同的操作。 【参考方案1】:

这是关于防火墙的问题。 代码有效。

【讨论】:

以上是关于使用 powershell 访问 EWS 上的 Inbox 和 SentItems 文件夹的主要内容,如果未能解决你的问题,请参考以下文章

Powershell EWS 从共享邮箱发送电子邮件

通过Powershell调研EWS API删除特定主题邮件操作手册

如何使用 EWS 将项目移动到文件夹?

使用 EWS 访问通用流程收件箱

使用 EWS 读取 Exchange Server 上的所有自定义属性

在Office365上获取对EWS的访问令牌时无效的作用域