我试图在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
语句,我计划使用正则表达式来匹配邮件头,只有当所有子字符串都存在时,才使用正向前瞻Assert来匹配邮件头。下面是我的Regex:(?=dkim=pass)(?=spf=pass)(?=header.from=example.com)(?=header.d=relayprovider.net)
当我尝试在一个据说是.NET兼容的Regex测试器中对上面的示例头进行测试时,我没有得到匹配。如果我只使用一个Assert,如(?=dkim=pass)
或(?=spf=pass)
,我会得到一个匹配,但当我将它们组合在一起时,它就不匹配了。
我做错了什么?
1条答案
按热度按时间u2nhd7ah1#
(?=dkim=pass)
要求dkim=pass
紧跟在前一个匹配项之后。与所有其他lookaheads一样,它们是相互排斥的。你需要用
检查字符串中的任何位置。
另外,我已经避开了你的点,以防万一。