我想执行一项规则如下:
换言之:
if not header :contains "To" "@example.com" { keep; } else { discard;}语句的问题在于,如果在其他非"*@example.com“地址中存在”*@example.com“地址,则不会保留邮件。
我需要的是一个否定搜索模式的选项,而不是完整的语句,例如:if header :contains "To" NOT "@example.com" { keep; } else { discard;}
有什么办法解决这个问题吗?
发布于 2021-12-28 13:29:32
这样做是可行的:
require "regex";
if header :regex "to" "@[^(example.com)]+" { keep; } else { discard; }发布于 2022-04-18 19:11:04
有一个:count匹配类型(如:is和:contains等)在"关系型“扩展中,您可以与:comparator比较器一起使用它,实际上您的用例就是它的标准示例!
如果您使用的是Dovecotpigeon空洞(许多包解决方案和提供程序(如RoundCube、FastMail和其他提供程序)都使用它),则“关系”扩展将与其他扩展一起使用,您只需将它(及其比较器,请参阅下面)与其他扩展一起使用。只要支持扩展,无论使用什么实现,筛网过滤器看起来都应该是一样的。
IANA维护官方扩展的主列表。如果您使用Dovecotpigeon孔筛子,在它的Github上向下滚动到“实现状态”,看看哪些是支持的(最完整的)。这意味着您不需要搜索就可以找到“关系”扩展。
请注意,虽然基本安装(Dovecot的实现)支持:comparator,但默认情况下它不包括数值比较,排序规则本身是必须具体要求的扩展。
require [..., "relational","comparator-i;ascii-numeric"]
# ...
# reject if the number of recipient addresses is greater than 1
if allof(
address :domain ["to","cc"] "example.com",
address :count "gt" :comparator "i;ascii-numeric" ["to","cc"] "1"){
# if you really want it destroyed
# discard;
fileinto :create "Trash"; stop;
}我做了一些测试,筛选器会将TO & CC (但不是BCC)的计数结合起来进行比较,因此它适用于(可见的)收件人地址的总数。
RFC 5228:筛
RFC 5231:关系扩展
https://serverfault.com/questions/1082166
复制相似问题