问题
我正在通过基于 Exchange 的规则设置 SCL 值。当符合所需条件且正确设置了 SCL 值(如邮件标头所示)时,规则就会正确应用。此外,设置的 SCL 值 (6) 与垃圾邮件 SCL 阈值(默认值为 5)相匹配。
但是,Exchange 服务器不会将邮件放入垃圾邮件文件夹。
我正在寻找有关可能出现问题、可能扰乱正确工作流程等的提示。或者有关要执行的其他诊断步骤的任何提示。
设想
我目前正在按照以下场景(示例值)进行向 Exchange 2016 的迁移:
- DNS MX 记录将发件人定向到旧服务器,
- 旧服务器通过 SpamAssassin 执行垃圾邮件分析,并在邮件中添加相应的标题,包括
X-Spam-Score
: - 发送给旧服务器未知的收件人(即迁移的邮箱)的邮件将被转发到 Exchange,
- Exchange 对标头值应用规则
X-Spam-Score
,匹配模式[+]{4}
(四个或四个以上+
字符,相当于4.0+
分数),将 SCL 级别设置为6
。
规则的具体配置(基于Get-TransportRule
显示):
HeaderMatchesMessageHeader : X-Spam-Score
HeaderMatchesPatterns : {[+]{4}}
SetSCL : 6
我知道这到目前为止是有效的,因为收到的与X-Spam-Score
模式匹配的消息确实获得了X-MS-Exchange-Organization-SCL: 6
标题。
但邮件最终还是进入了收件箱,而不是被转发到垃圾邮件文件夹 :(
传递的消息中的标头结果集示例:
X-Spam-Score: 8.0 (++++++++)
X-MS-Exchange-Organization-SCL: 6
X-MS-Exchange-Organization-AuthSource: mbx-a.example.com
X-MS-Exchange-Organization-AuthAs: Anonymous
X-MS-Exchange-Transport-EndToEndLatency: 00:00:01.0250276
X-MS-Exchange-Processed-By-BccFoldering: 15.01.1531.003
附加信息
上述配置基本上是标准 Exchange Online Protection 配置的模拟,其中 EOP 服务器可以看作是装有 SpamAssassin 的旧服务器的等效物。在这方面,EOP 文档建议采用非常相似的配置,仅在用于确定邮件状态的源标头上有所不同。进一步的部署计划假设在旧服务器之前部署 EOP,然后删除具有垃圾邮件保护角色的旧服务器。
到目前为止,有关垃圾/删除/拒绝 SCL 阈值的服务器配置几乎都是默认的,具体如下:
获取组织配置:
SCLJunkThreshold : 4
获取内容过滤器配置:
SCLRejectThreshold : 7
SCLRejectEnabled : True
SCLDeleteThreshold : 9
SCLDeleteEnabled : False
SCLQuarantineThreshold : 9
SCLQuarantineEnabled : False
Exchange 设置不包括边缘传输服务器,并且邮箱服务器上未安装/启用反垃圾邮件代理,但 Microsoft 文档未在任何地方提及此类要求,例如:
- https://docs.microsoft.com/.../ensure-that-spam-is-routed-to-each-user-s-junk-email-folder
- https://docs.microsoft.com/en-us/exchange/edge-transport-servers
更新 1
我已经在所有节点上安装了反垃圾邮件代理并执行了以下测试:
- 发送虚假邮件以触发 SenderID 失败;
- 发送虚假邮件以触发高 SCL 结果而不会触发预先拒绝。
两次测试都导致 SCL6 邮件被投递,但同样被送达至收件箱而不是垃圾邮件文件夹。
这证明该问题与传输规则无关。无论哪种机制提高/设置 SCL 级别,邮件最终都会进入收件箱。
答案1
我找到了问题的直接原因。
垃圾邮件通过收件箱规则机制移至垃圾邮件文件夹,该机制相当于传输规则,但在邮箱级别 - 可通过Mail > Automatic processing > Inbox and sweep rules
选项卡进行配置。
每个邮箱默认带有一个名为的隐藏收件箱规则Junk E-mail Rule
- 它的存在可能会通过 PowerShell 显示:
PS > Get-InboxRule -Mailbox "[email protected]" -IncludeHidden
Name Enabled Priority RuleIdentity
---- ------- -------- ------------
Junk E-mail Rule True 1 4028702183896383681
在我们的服务器中,大量邮箱(使用单个 PowerShell 批处理创建的 75% 的帐户)缺少此规则。
虽然导致规则缺失的根本问题尚不清楚并将进行调查,但临时解决方案是通过关闭并重新打开垃圾邮件过滤来重新生成规则:
Set-MailboxJunkEmailConfiguration $MailBox -Enabled $False
Set-MailboxJunkEmailConfiguration $MailBox -Enabled $True
这可能适用于所有受影响的邮箱:
Get-Mailbox -ResultSize Unlimited | %{
$Rule = Get-InboxRule -Mailbox $MailBox -IncludeHidden | ? Name -eq "Junk E-mail Rule"
If ( $Rule -eq $null ) {
Set-MailboxJunkEmailConfiguration $MailBox -Enabled $False
Set-MailboxJunkEmailConfiguration $MailBox -Enabled $True
}
}
请注意,在根本问题得到解决之前,需要在与创建交换账户有关的所有工作流程中实施此程序。