【发布时间】:2021-07-31 08:00:15
【问题描述】:
典型的合法电子邮件“标头来自”字段如下所示:
From: DHL <noreply@dhl.com>
From: DHL <legit.sender@noreply.dhl.com>
虽然非合法电子邮件“标头来自”字段如下所示:
From: DHL <fake.sender@somedomain.com>
我想写一个正则表达式匹配非合法电子邮件“header from”的情况,也就是说,如果DHL出现在“From:”之后,那么里面的内容必须以dhl.com
我使用负前瞻提供了以下正则表达式(不确定它是否 100% 准确,但它似乎有效):
^From: DHL <.*@(?!.*dhl\.com>$)
现在的问题是我的正则表达式引擎不支持负前瞻,我正在尝试将其替换为等效的非捕获组,例如:
(?:[^d]|d[^h]|dh[^l]|dhl[^\.]|dhl\.[^c]|dhl\.c[^o]|dhl\.co[[^m])
到目前为止没有成功。有什么想法吗?
如果有解决方案,我也想支持大小写混合(如 DhL.COm)。
我正在寻找一种 Postfix 解决方案,最好是不需要 PCRE 的解决方案。
【问题讨论】:
-
您使用的是哪个正则表达式引擎?如果是 Procmail,您可能需要多个条件。如果是 Postfix,我相信你可以想出一个使用 PCRE 正则表达式的方法。
-
如果你可以反转条件,那么
^From: DHL <.*dhl.com>$可以工作,你只是说当正则表达式不匹配时。 -
不幸的是,Zachary Haber,这也将匹配所有非 DHL 来源的电子邮件。但是,如果您可以创建复合条件,那么像 ^From: DHL\s AND NOT ^From: DHL <.>$ 这样的东西就可以了。
-
@tripleee,postfix-pcre 确实是一种选择,但不幸的是,在我的情况下这是不可能的。
-
那么,您是在寻找 Postfix 解决方案还是完全其他的解决方案?这会影响我们可以使用哪些精确的正则表达式工具。另请参阅Stack Overflow
regextag guidance,其中阐明了识别您想要支持的工具或平台的要求。
标签: regex regex-lookarounds postfix-mta email-spam