我试图在O365中创建一个邮件流规则,该规则需要匹配来自Authentication-Results
标头的特定元素。下面是一个编辑过的示例标题:
Authentication-Results: spf=pass (sender IP is 12.34.56.78) smtp.mailfrom=relayprovider.net; dkim=pass (signature was verified) header.d=replayprovider.net;dmarc=none action=none header.from=example.com;compauth=fail reason=001
我需要匹配规则时,所有这些特定的子字符串都存在:dkim=pass
spf=pass
header.d=relayprovider.net
header.from=example.com
换句话说,当我们收到Example.com的批量邮件发送者(relayprovider.net)的电子邮件时,该电子邮件通过了dkim和spf检查。
O365邮件流规则只允许头上的单个条件,并且对于每个匹配条件只允许OR
语句,我计划使用正则表达式来匹配头,只有在所有子字符串都存在时才使用正向向前看断言来匹配头。这是我的正则表达式:
(?=dkim=pass)(?=spf=pass)(?=header.from=example.com)(?=header.d=relayprovider.net)
当我尝试在一个据说是。net兼容的Regex测试器中对上面的示例头进行测试时,我没有得到匹配。如果我只使用一个断言,如(?=dkim=pass)
或(?=spf=pass)
,我得到一个匹配,但当我把它们组合起来时,它不匹配。
我做错了什么?
(?=dkim=pass)
要求dkim=pass
立即跟随先前的匹配。
你需要使用
^(?=.*dkim=pass)(?=.*spf=pass)(?=.*header.from=example.com)(?=.*header.d=relayprovider.net)
检查字符串内的任何地方。
还有,我已经躲过了你的点,以防万一。