脚步:

脚步:

在 Thunderbird 中,可以选择匹配以下所有或者符合以下任意一项给定一组过滤规则。没有办法混合或者逻辑运算符可以自由创建更复杂的条件,如 ((A AND B) OR (C AND D)) AND E。
是否有插件可以实现上述功能?

答案1

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

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

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

答案2

我似乎找不到一个好的扩展来做到这一点,但如果你只是在单个文件夹中搜索,快速搜索工具栏也能发挥同样的作用。

例如 - 如果我想为来自 Tommy 和 Billy 的所有消息(但不包括主题中带有 Fwd 的消息)以及来自 Sandra 的消息(包括转发)创建条件,我会设置搜索(使用快速搜索工具栏并将其设置为按表达式搜索):

((发件人:Tommy 或 发件人:Billy) AND -subject:Fwd) 或 (发件人:Sandra)

然而,如果有多个文件夹,这是不可能的。

J

答案3

使用 FiltaQuilla 和一些 javascript 操作/规则,这是可行的。但是,这里是一个对 FiltaQuilla 源代码进行了一些修改的示例,以简化流程。

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

脚步:

安装 FiltaQuilla

看来很多功能只能在 Thunderbird 3.1 上使用。因此请先升级到 TB 3.1。然后安装 FiltaQuilla。

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

修改 FiltaQuilla 源

编辑 ”[电子邮件保护]/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”标题字段中。

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

创建逻辑修改的过滤规则

在过滤规则标题字段下拉框中,使用“自定义”将“我的关键词”添加到列表中。然后在过滤对话框中选择“我的关键词包含公司-”作为条件。

在操作部分中选择“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”标头字段访问所有标记结果。只需解析字符串,然后可以在解析后应用任何逻辑来实现您想要的逻辑结果。例如,您可以应用 if “A” and “B”,将“result-AB”添加到“mykeywords”等。然后在下一个阶段检查“mykeywords 包含 result-AB”是否真正代表“A and B”。

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

创建操作过滤规则

现在根据“mykeywords”中包含的值创建操作规则。这只是常规设置。

笔记:

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

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

答案4

这是一个突出的错误https://bugzilla.mozilla.org/show_bug.cgi?id=297852

您需要msgFilterRules.dat在配置文件文件夹下的邮件帐户中进行编辑(请参阅菜单“帮助”>“疑难解答信息”)。POP3 帐户位于下方,(profile folder)/Mail而 IMAP 帐户位于下方(profile folder)/ImapMail。这是 IMAP 帐户过滤器的一个示例:

name="HRstuff"
enabled="yes"
type="17"
action="Move to folder"
actionValue="imap://syockit%[email protected]/INBOX/HR"
condition="AND (subject,contains,HR) AND (all addresses,contains,[email protected])"

在此示例中,过滤器是使用“匹配以下所有内容”条件创建的。条件格式相当笨拙,因为第一个操作数也以布尔运算符作为前缀,AND (A) AND (B)而不是更直观的(A) AND (B)

现在,要创建嵌套条件,例如(A||C)&&(B||D),按如下方式编写

AND (OR (A) OR (C)) AND (OR (B) OR (D))

修改条件并保存后msgFilterRules.dat,我建议不要在 Thunderbird 中编辑此高级过滤器,以免其损坏。不过,您可以编辑其他简单过滤器。务必备份msgFilterRules.dat

我使用的是 Thunderbird 115.6.1,到目前为止似乎可以正常工作。我还没有尝试过嵌套深度超过 2 层。

相关内容