如何在Thunderbird的邮件过滤器中结合过滤规则以创建更高级的过滤条件?


13

在Thunderbird中,可以为一组给定的过滤规则选择“ 匹配以下所有内容”或“ 匹配以下任何内容 ”。无法自由组合ORAND逻辑运算符以创建更复杂的条件,例如((A AND B)OR(C AND D))ANDE。
是否有任何插件可以实现上述要求?

Answers:


5

我需要过滤来自一个人的许多不同主题,所以我的解决方案是:

  1. 添加了一个过滤器以匹配以下任何一个,并添加了我想要的任何主题。
  2. 我将其设置为执行的操作是将优先级设置为最低。
  3. 然后,我添加了一个新过滤器以匹配以下所有条件:优先级最低,并且来自包含(我要从中过滤的电子邮件地址)。
  4. 我设置的动作是移至某个文件夹。

您需要确保的一件事是,第一个文件管理器在列表中位于较高位置,因此它首先被执行。我知道这不是最优雅的解决方案,但是可以扩展以满足您的需求。


3

我似乎找不到一个很好的扩展名来执行此操作,但是如果您仅在单个文件夹中进行搜索,则快速搜索工具栏的功能也一样。

例如,如果我想为来自Tommy和Billy的所有邮件(而不是主题为Fwd的邮件)以及来自Sandra的邮件(包括转发)创建条件,我将进行搜索(使用设置为search的快速搜索工具栏)通过表达式):

((来自:Tommy或来自:Billy)和-subject:Fwd)或(来自:Sandra)

但是,对于多个文件夹,这是不可能的。

Ĵ


好的话。遗憾的是此功能在过滤规则模块中不可用。
Piotr Dobrogost

2

使用FiltaQuilla和一些JavaScript操作/规则,它是可行的。但是,这里是对FiltaQuilla源进行一些修改以简化过程的示例。

此处的示例将执行三个过滤阶段:标记-仅对电子邮件进行分类。然后,进行修改-进行一些逻辑计算并修改电子邮件主题或标头。而且,采取行动-采取实际行动。每个阶段都会正常地在Thunderbird过滤器对话框中编辑过滤器,但FiltaQuilla会添加一些选项。第1阶段和第2阶段将其结果保存在新添加的电子邮件标题字段中,第2阶段和第3阶段使用该字段中的结果在执行常规操作之前执行一些逻辑操作。

脚步:

安装FiltaQuilla

看起来许多功能仅适用于Thunderbird 3.1。因此,首先要升级到TB 3.1。然后安装FiltaQuilla。

在FiltaQuilla首选项选项卡中,启用“主题的后缀”和“ Javascript操作”。

修改FiltaQuilla源

在扩展目录中编辑“ filtaquilla@mesquilla.com/content/filtaquilla.js”,使其看起来像这样:

// Suffix to subject
self.subjectSuffix =
{
  ...
  apply: function(aMsgHdrs, aActionValue, aListener, aType, aMsgWindow)
  {
    for (var i = 0; i < aMsgHdrs.length; i++)
    {
      var msgHdr = aMsgHdrs.queryElementAt(i, Ci.nsIMsgDBHdr);
      ////var appSubject = _mimeAppend(aActionValue, msgHdr.subject, false);
      ////msgHdr.subject = appSubject;
      var headerName = "mykeywords";
      var headerValue = msgHdr.getStringProperty(headerName);
      msgHdr.setStringProperty(headerName, headerValue + " " + aActionValue);
      headerValue = msgHdr.getStringProperty(headerName);
        // Cu.reportError("chg : " + headerName + " : " + headerValue);
    }
  },

该代码将“后缀转换为主题”的原始操作更改为,它将后缀字符串添加到名为“ mykeywords”的新标题中。这个新的标题字段将用于保留字符串形式的前两个过滤结果。

此源代码更改是为了重用“后缀”操作,因为通常给主题加后缀不是很有用。因此,重用其内部胆量不会对FiltaQuilla的可用性产生很大影响。如果不这样做,则应将正式功能请求发布到FiltaQuilla创建者以添加所需的功能,否则您将需要在过滤条件中编写更多的Javascript代码作为Javasctipt条件。

创建标记的过滤规则

一个示例是创建一系列规则,每个规则只有一个动作:“主题的后缀”,但是带后缀的单词将分别标识它所获得的结果。例如,通过给单词加上“ company-A”,“ company-B”,...等后缀来对电子邮件进行分类。请记住,这些单词“ company-A”,“ company-B”等。,将被串联到“ mykeywords”标题字段中。

将这些规则放在过滤器规则列表的开头。

创建用于逻辑修改的过滤器规则

在过滤规则标头字段下拉框中,使用“自定义”将“ mykeywords”添加到列表中。然后在过滤器对话框中选择“ mykeywords contains company-”作为条件。

在“操作”部分中选择“ Javascript操作”。添加如下代码:

for (let index = 0; index < msgHdrs.length; index++)
{
  let hdr = msgHdrs.queryElementAt(index, Ci.nsIMsgDBHdr);
  let s = hdr.getStringProperty("mykeywords");
  let v = s.split("company-"); /* result words are in v[] now */
  let r = ""; /* logic conversion result */
  let cnt = 0;
  if ( v != undefined && v.length != undefined && v.length > 0) {
    let lastVN = 0;
    for(var i=v.length -1; i>=0; i--) {
      let ss = v[i];
      if ( ss.length > 1 ) {
          ss = ss.substring(0);
          /* convert company A into VIP, B into NORMAL, C into IGNORE. 
           * Assume the marking section starts with A,B, then C thus 
           * C gets parsed first, then A and B. 
           */
          if (ss.search(/A/) == 0)  { ss = "V"; lastVN = 1; } /*VIP*/
          else if (ss.search(/B/) == 0 ) { ss = "N"; lastVN = 1; } /*NORMAL*/
          else if (ss.search(/C/) == 0   ) { ss = "IGNORE"; }
          /* prepend subject line */
          if ( cnt == 0 ) { r = ss + "] ";
          } else { if (lastVN == 0) r = ss + " " + r; else  r = ss + r;  }
          cnt ++;
      }
    } /* for(var i=v.length -1; */
    if ( cnt > 0 ) { r = "[" + r; }
  } /* if ( v != undefined && */
  hdr.subject = r + hdr.subject;
} /* for (let index = 0; */

此时,脚本可以从“ mykeywords”标题字段访问所有标记结果。只需解析字符串,解析后即可应用任何逻辑,以获得所需的逻辑结果。例如,可以应用“ A”和“ B”,在“ mykeywords”中添加“ result-AB”,等等。然后在下一阶段中检查“ mykeywords包含result-AB”对于“ A和B”的实际含义”。

上面的示例还显示,可以在主题行之前添加“ [VN IGNORE]”,以指示主题电子邮件中已涉及三个公司中的哪个公司。

创建行动过滤规则

现在,基于“ mykeywords”中包含的值创建操作规则。这只是正常设置。

笔记:

FiltaQuilla在条件部分中支持javascript。因此,如果您不想更改扩展源代码,则需要在过滤器对话框的条件部分中编写更多代码。使用该代码,任何逻辑计算也可以完成。

请访问FiltaQuilla网站以获取更多信息。


1

也许您可以为表达式的每个子句使用标签。if(((from:Tommy OR from:Billy)然后使用“ TomAndBilly”标记进行标记。然后过滤查找主题:Fwd AND标记TomAndBilly。我没有尝试过,如果结核病无法治愈,我想它不会起作用过滤一次以上,也许您还可以通过将邮件退回到不同的文件夹甚至帐户来强制其执行多次(但随后开始变得非常丑陋)。

我听说更好的标记应该在TB3中使用,但是在UI中似乎并不明显。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.