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

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

内容简介:今天给大家分享一个之前做过的案例,通过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删除特定主题邮件操作手册


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

查看所有标签

猜你喜欢:

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

C++程序设计语言

C++程序设计语言

Bjarne Stroustrup / 裘宗燕 / 机械工业出版社 / 2010-3-1 / 99.00元

本书是在C++语言和程序设计领域具有深远影响、畅销不衰的著作,由C++语言的设计者编写,对C++语言进行了最全面、最权威的论述,覆盖标准C++以及由C++所支持的关键性编程技术和设计技术。本书英文原版一经面世,即引起业内人士的高度评价和热烈欢迎,先后被翻译成德、希、匈、西、荷、法、日、俄、中、韩等近20种语言,数以百万计的程序员从中获益,是无可取代的C++经典力作。 在本书英文原版面世10年......一起来看看 《C++程序设计语言》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具