需求环境:
有时候,我们可能会遇到如下场景:
1.用户或管理员由于误操作,向全公司发了一封邮件,事后才发现自己发错了。尽管可以通过邮件撤回功能减小此操作带来的负面影响,但是邮件撤回只能应用在对方还没有查看这封邮件的情况下,如果对方看过了,邮件撤回功能也就无力回天了。
2.组织内收到了大量相同的垃圾邮件,如何批量且快速地从用户邮箱中删除这些垃圾邮件就显得非常有必要了。
3.离职人员发了一封对领导或公司不利的邮件,公司要求立即删除。
鉴于存在以上的场景和并未罗列出来的类似场景中的需求,我给大家带来这篇文章,向大家讲述Exchange 2007 如何通过Cmdlet来快速实现这个需求,也就是如何通过Exchange2007命令行管理程序Cmdlet批量删除包含特定主题或关键字的邮件。
(注:这里不对Exchange2003讨论,据我所知,类似的需求尽管能在Exchange2003中实现,但是比较麻烦。)
演示环境
1. ExchangeServer & DC:dc01.tech.com
2. 已通过administrator@ tech.com这个邮箱用户向组织内两个用户zhangsan@ tech.com和lisi@ tech.com群发了三封邮件,分别为:
主题为“通知”,正文为空的邮件;
主题为“艳照门”,正文为空的邮件
主题为“加薪水啦”,正文为“加薪”的邮件
3. 查看各用户邮箱已收到上述三封邮件;
4. 新建一个存放删除邮件的普通用户邮箱DelMail@ tech.com。
操作步骤:
要想实现“通过Cmdlet批量删除包含特定主题或关键字的邮件”这个功能,需要做以下几个步骤:
1.给当前操作账号一定的权限;
A. 当前操作账号必须有Exchange2007特定的管理权限:
a. 该账号需属于Exchange Server 管理员角色以及源服务器和目标服务器的本地 Administrators 组;
b. Exchange 收件人管理员角色。
这个权限比较容易满足,直接使用默认个域管理员即可。当然前提是你没有对域管理员的权限进行过自定义修改。
B. 当前操作账号必须具备对其他人用户邮箱的读写权限。
因为默认情况下,域管理员和Exchange管理员并没有权限访问其他用户的邮箱。只有NT Authority\Self组才对自己的邮箱有完全访问权限,实际上这个组就代表经过身份验证的自己,换言之,也就是说缺省情况下,只有自己才能完全访问自己的邮箱,哪怕是域管理员、Exchange管理员也不行。所以必须给当前操作账号对其它用户邮箱的读写权限。那么如何给当前操作帐户对其它用户邮箱的读写权限呢?操作命令如下:
Get-mailbox | Add-MailboxPermission -User 当前操作账号 -AccessRights Fullaccess
撤消当前操作账号对用户邮箱的读写权限,命令如下:
Get-mailbox | Remove-MailboxPermission -User administrator -AccessRights Fullaccess
2. 在存放删除邮件的用户邮箱[email protected]中创建“删除邮件”文件,用以保存删除的邮件;
3. 使用如下cmdlet,将满足特定关键字的邮件抽取出来,保存到[email protected]邮箱中的“删除邮件”目录
Get-Mailbox –Database "Mailbox Database" | Export-Mailbox -SubjectKeywords "艳照门" -TargetMailbox [email protected] -TargetFolder "删除邮件" –DeleteContent
注:a. “Mailbox Database”请替换为实际的邮箱数据库名;
b. [email protected]是存放删除邮件的目标用户邮箱,是一个普通用户邮箱;
c. "删除邮件"是[email protected]邮箱中的文件夹名,是用来存储其它邮箱中删除的那封邮件的;
d.如果不加-DeleteContent参数,则只会将用户邮箱中的“艳照门”邮件复制一份到[email protected]的“垃圾回收站”中,这样不是很满足我们的需求,我们需要的是“剪切”,而不是“复制”,所以加上了这个参数。
4.检查删除结果。
A. 登陆用户邮箱,检查发现,主题为“艳照门”的邮件已不存在;
B. 登陆[email protected]邮箱,发现,这个邮箱的“删除邮件”文件夹中,有好多封主题为“艳照门”的邮件。
5. 上面是对主题关键字进行操作,下面我们来抽取符合特定正文关键字的邮件,运行如下cmdlet,
Get-Mailbox –Database "Mailbox Database" | Export-Mailbox -ContentKeywords "加薪" -TargetMailbox [email protected] -TargetFolder "删除邮件" –DeleteContent
6.检查发现特定正文关键字为“加薪”的邮件已不存在。
到现在为止,我们成功实现了删除所有用户邮箱中的指定邮件,而这一切不需要任何用户知道,一切几乎都是透明的。至于如何处理提取出来的邮件,是删除还是保留就看你自己了。
结束语
通过以上测试,我们实现了通过Cmdlet批量删除包含特定主题或关键字的邮件。圆满完成任务。其实,不只是可以针对主题和内容关键字过滤,还可以对邮件附件过滤。比如某一病毒程序向全公司发了一封带毒的附件,这个时候就可以对邮件附件进行过滤了,凡是有这个文件名的附件都可以揪出来,杀之!过多的应用场景就不讨论了,文中提到的一些cmdlet命令之详细用法和更多参数请参考Exchange的帮助文档。