公司有员工离职前给全公司人群发一份离职邮件,近日老板比较不爽,认为这样的负能量会影响士气,要求禁止此类邮件发生。部门领导给的办法是根据关键字禁止。先按领导的意思办咯,马上开始测试。
刚开始以为那不是很简单么,就跟OUTLOOK内设置就行了。于是按下面的步骤处理:
在起好规则名字后,选择条件窗口内,勾选“主题字段包含特定词语时”,并添加要检查的词语,然后下一步设置好处理操作措施。
建完后的结果如下:
用命令行执行:New-TransportRule -Name '测试规则' -Comments '' -Priority '0' -Enabled $true -SubjectContainsWords '告别' -DeleteMessage $true
设置完测试时,傻眼了,只能精确匹配。关键字前或后随便加一个字规则就不能生效了。不是写的“包含”吗?微软你在玩什么?官方网站上居然这么写:精确匹配!而且*号什么的都不能用!那还用个卵!
只有换一种思路,找其他方法了。经过艰苦卓绝地努力,在官方文档内(https://technet.microsoft.com/zh-cn/library/dd638183(v=exchg.141).aspx) 的表3“传输规则谓词中使用的属性类型”中发现了这个玩意儿:
就是嘛,正则表达式是可以用的嘛。这就好办了。赶紧点击那个“传输规则中的正则表达式”,打开网页:https://technet.microsoft.com/zh-cn/library/aa997187(v=exchg.141).aspx 哈哈,一目了然了。原来上面那种精确匹配的是“简单表达式”,我应该用的是(而且正常情况也是用这个多点吧)“正则表达式”。
用正则表达式实现:
在选择条件时,应该勾选“主题字段与文本模式匹配时”,而不是“包含特定词语”!
然后在“指定文本模式”窗口内,只需要输入计划过滤的词语,就可以实现非精确匹配了。
用命令行实现:New-TransportRule -Name '禁止离职群发邮件' -Comments '' -Priority '0' -Enabled $true -SubjectMatchesPatterns '告别' -DeleteMessage $true
添加多个词语:
Set-TransportRule -Identity '禁止离职群发邮件' -Name '禁止离职群发邮件' -Comments '' -SubjectMatchesPatterns '告别','离职','分别','离开'
设置过程中,还有一个比较有趣的玩意儿,就是关于“*”通配符的作用。刚开始以为前后都要加了*才能实现模糊匹配。后来才发现什么都不加就可以了。那么加了是什么个意思呢?经过测试,原来*加到前面是不允许的:
如果词语是两个汉字,“*”加到词语的后面和加到词语中间都是一样的效果,都表示这两个字前面后面中间都可以加其他字符而模糊匹配。
如果是三个以上的汉字,情况很复杂,经过一天测试,仍没法找到规律。
查询状态:
第一种:
C:\Windows\system32>get-transportrule "测试规则" |format-list
SubjectContainsWords : {告别}
第二种:
C:\Windows\system32>Get-TransportRule "禁止离职群发邮件" | format-list
SubjectMatchesPatterns : {告别,离职,分别,离开}