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

栏目: 编程工具 · 发布时间: 7年前

内容简介:今天给大家分享一个之前做过的案例,通过Powershell调用Exchange ews API去上次特定主题邮件。【我测试的环境Exchange版本为Exchange 2016】具体的操作过程如下:通过EWS API去删除特定主题邮件方法,比传统的Search-Mailbox去删除特定邮件的方法更有效。EWS去查找邮箱项目一次可以返回1000个对象(Exchange 2013可以通过策略解除限制,如果是Exchange 2016无法通过测量解除限制,如果某个邮箱中同一主题邮件超过1000时,需要多次执行脚

今天给大家分享一个之前做过的案例,通过Powershell调用Exchange ews API去上次特定主题邮件。【我测试的环境Exchange版本为Exchange 2016】

具体的操作过程如下:

1. 说明

通过EWS API去删除特定主题邮件方法,比传统的Search-Mailbox去删除特定邮件的方法更有效。EWS去查找邮箱项目一次可以返回1000个对象(Exchange 2013可以通过策略解除限制,如果是Exchange 2016无法通过测量解除限制,如果某个邮箱中同一主题邮件超过1000时,需要多次执行脚本来删除邮件),而Search-mailbox一次检索只能返回250个对象。并且Search-mailbox查询无法精确匹配,有时候会将筛选条件无关的内容查询出来。

EWS API可以在非Exchange上的任何服务器上执行,而Search-Mailbox命令只能在安装了Exchange Powershell工具的加域计算机上执行。

2、下载EWS manged API 2.2

首先通过如下地址下载Exchange EWS managed API。

下载并安装EWS Managed API: https://www.microsoft.com/en-us/download/confirmation.aspx?id=42951

3 安装EWS Manged API 2.2

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

设置安装路径。

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

4 为执行账号添加权限

在通过EWS进行邮件删除之前需要为当前执行账号添加一个ApplicationImpersonation角色权限。

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

5 创建一个限制策略取消EWS的限制

New-ThrottlingPolicy Ews_unlimited

Set-ThrottlingPolicy Ews_unlimited -RCAMaxConcurrency Unlimited -EWSMaxConcurrency Unlimited -EWSMaxSubscriptions Unlimited -CPAMaxConcurrency Unlimited -EwsCutoffBalance Unlimited -EwsMaxBurst Unlimited -EwsRechargeRate Unlimited

Set-Mailbox -identity test -ThrottlingPolicy " Ews_unlimited "

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

6 调整EWS删除邮件执行脚本

将下面标黄部分根据实际情况进行调整。

#========================脚本开始=========================
param(
$Mailbox,
$userName=$cred.UserName,
$password=$cred.GetNetworkCredential().password,
[string]$subject
)
$uri=[system.URI] "https://mbx01.itservice.vip/ews/exchange.asmx" #服务器EWS URL
$dllpath = "C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll"   #安装的EWS API路径
Import-Module $dllpath

# Set Exchange Version and connect to Exchange Server
$exchService = new-object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2016_CU7) 
$ExchangeVersion = [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2016_CU7
$service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService($ExchangeVersion)
$service.Credentials = New-Object Microsoft.Exchange.WebServices.Data.WebCredentials -ArgumentList $userName, $password
$service.url = $uri
$service.ImpersonatedUserId = New-Object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId `
([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SMTPAddress,$Mailbox);
#$Mailbox is the mailbox id need to be searched 
# Getting Folders in the Mailbox
# you can change to folder view if there are more than 100 folder in the mailbox
$folders = New-Object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::MsgFolderRoot, $Mailbox)
$MailboxRoot=[Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,$folders)
$FolderList = new-object Microsoft.Exchange.WebServices.Data.FolderView(100)
$FolderList.Traversal = [Microsoft.Exchange.WebServices.Data.FolderTraversal]::Deep
$findFolderResults = $MailboxRoot.FindFolders($FolderList)
 #"sender,"+"ReceivedRepresenting,"+"Subject,"+"DateTimeReceived" > $logfile
foreach ($fdr in $findFolderResults.Folders)
{
$emailsInFolder=$fdr.FindItems(1000000)
foreach($individualEmail in $emailsInFolder)
{
 if ($individualEmail.subject -like  "*$subject*")
 {
 "$($individualEmail.sender),"+"$($individualEmail.ReceivedRepresenting),"+"$($individualEmail.subject),"+"$($individualEmail.DateTimeReceived)" | Out-File $logfile -Append -Encoding utf8
echo "successfully found the email with subject $($individualEmail.subject) from $Mailbox"
$individualEmail.Delete([Microsoft.Exchange.WebServices.Data.DeleteMode]::HardDelete)
echo "successfully deleted the email with subject $($individualEmail.subject) from $Mailbox"
}
}
}
#===============================脚本结束====================================================

7 执行批量删除指定主题列表邮件

将上面脚本保存为.ps1脚本【此示例中保存为ews01.ps1】。

接下来,创建一个Action_Ews.ps1脚本,去调用ews01.ps1脚本,这样当执行Action_Ews.ps1脚本执行完成后,会在当前目录下产生一个delet_log文本文件,该文件中记录删除的邮件信息。(发件人、收件人、邮件主题和邮件接收时间)

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

Action_Ews.ps1脚本内容如下:

#=======================脚本开始============================

$mailboxlist=Import-Csv -Path .\allMailboxList.csv #用户邮箱列表文件

[string]$logfile=".\delete_log.txt"

"sender,"+"ReceivedRepresenting,"+"Subject,"+"DateTimeReceived" > $logfile

foreach($mailboxs in $mailboxlist)

{

$subjectlist=Import-Csv -Path .\SubjectList.csv #主题列表

foreach($subject in $subjectlist)

{

write-host "Now finding subject is $($subject.subject) from $($mailboxs.PrimarySmtpAddress)........."

& .\ews01.ps1 -Mailbox $mailboxs.PrimarySmtpAddress -subject $subject.subject -userName "admin@itservice.vip" -password " P@ssw0rd"

}

}

#==================================脚本结束================================================

其中CSV文件内容格式如下:

allMailboxList.csv 格式如下

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

SubjectList.csv格式如下

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

8 执行效果

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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Design for Hackers

Design for Hackers

David Kadavy / Wiley / 2011-10-18 / USD 39.99

Discover the techniques behind beautiful design?by deconstructing designs to understand them The term ?hacker? has been redefined to consist of anyone who has an insatiable curiosity as to how thin......一起来看看 《Design for Hackers》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

html转js在线工具
html转js在线工具

html转js在线工具