【问题标题】:How to filter messages in Procmail that have specific words in hyperlinks如何过滤 Procmail 中超链接中包含特定单词的邮件
【发布时间】:2013-09-28 08:37:42
【问题描述】:

是否可以在 Procmail 中创建正则表达式来过滤掉包含某些单词的链接?

例如,我想过滤所有包含超链接的电子邮件,其中包含“取消订阅”一词(尽管它可能不是唯一的词)。这将过滤掉许多发送给我的时事通讯,放在一个我可以不时查看的子文件夹中。

例如,我试试这个:

.*<a.*unsubscribe.*</a>.*

但这只会过滤掉带有链接的任何内容,其中包含一些带有取消订阅的单词(不一定在链接中),然后是另一个关闭链接(不一定是单词之后的第一个)。它不会过滤单词 unsubscribe 之前的最后一个打开的超链接,直接跟在第一个关闭超链接标记之后。

我找不到任何信息如何找到某个单词之前的最后一次出现的 HTML,然后是单词,然后是单词之后的第一次出现的 HTML,我想这是我需要做的。

【问题讨论】:

    标签: procmail


    【解决方案1】:

    这并不完全准确,但可能与您想要的足够接近。

    :0B
    * <a([  ]+[^ > ]+)*[  ]+href="[^>"]*unsubscribe
    unsub/
    

    这会查找带有 href 属性的 HTML a 元素,该元素包含在正文中的 unsubscribeB 标志)的双引号中。可选组 ([ ]+[^ &gt; ]+)* 允许在 href 之前包含零个或多个其他属性。

    按照 Procmail 中的惯例,[ ][^ &gt; ] 中的空格应该是空格和制表符,顺序不限。 (我现在使用的移动设备无法让我轻松进入选项卡,因此这不是复制/粘贴证明。)

    然而,并不是所有的 HTML 都是格式正确的,不是所有的 href 属性都是双引号,也不是所有的 HTML 附件都是未经编码的。事实上,最大的实际缺陷是没有正确处理引用打印的 HTML。一个简单的“80/20”解决方案是将= 更改为=(3D)?;一个非常复杂的问题是如何处理所有可能的 QP 变化(包括可选的等号,任何地方的换行符);真正正确的解决方案是使用适当的 MIME 感知工具,而不是使用 Procmail,或者从 Procmail 内部使用;这样,您还可以透明地处理 base64 编码的 HTML。

    从表面上看,您的直接问题是通过将重复运算符从贪婪更改为非贪婪来回答的。总而言之,.* 将跳过尽可能多的文本,而[^&gt;]* 永远不会在下一次出现&gt; 之前跳过过去。但是,如上所述,由于 MIME 允许以不同方式对文本进行编码以便通过电子邮件安全传输,因此存在显着的额外复杂性。

    【讨论】:

    • 太好了,非常感谢,我会试一试,然后回复你。我从没想过我会过滤所有应该匹配的电子邮件,但如果它过滤了大部分就足够了!
    猜你喜欢
    • 2015-12-16
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    • 2021-03-11
    • 2023-04-09
    • 2021-01-10
    • 2012-07-26
    • 1970-01-01
    相关资源
    最近更新 更多