脚本 ThunderBird 过滤器

脚本 ThunderBird 过滤器

是否可以为 Thunderbird 编写自己的过滤器,我不在乎使用什么语言。

我希望能够对电子邮件(标题和文本)进行全面分析,并根据内容采取某些措施。

如果我能够将当前电子邮件与之前收到的消息进行比较,则可以获得加分(主要是为了删除重复的日志消息)

答案1

实际上,使用 FiltaQuilla 是可行的。(尝试过 FiltaQuilla 1.1.0 和 Thunderbird 3.1.9)。

下面是 FiltaQuilla 提供的“javascript action with body”下的测试脚本。它确实在错误控制台中显示了所有标头属性和正文。

一旦这些数据字段可供代码使用,它就需要遍历 messenger 文件夹和消息来比较它们。也许使用 hdr 上的“threadParent”属性可以简化逻辑,请参阅 MDC 上的 nsIMsgDBHdr 以获得提示。在代码中,可以设置额外的属性。例如,在代码中为重复的消息设置“hdr.myvar='1234'”,然后在稍后的过滤器中将 myvar 匹配为 1234 并执行正常操作以删除它们。

由于此脚本是过滤器的操作部分,因此过滤器的条件部分需要匹配所有感兴趣的消息。在此测试中,脚本安排在将消息复制到本地文件夹的操作之后,这可能是必要的,也可能不是必要的,但它确实会将消息正文下载到 IMAP 帐户上的本地计算机,因此该操作确实有正文可供访问。

//FiltaQuilla filter action script: 
for (let index = 0; index < msgHdrs.length; index++)
{ //get msg hdr:
  let hdr = msgHdrs.queryElementAt(index, Ci.nsIMsgDBHdr);

  //show subject: get it in two ways
  let s = hdr.getStringProperty("subject");
  if ( s != undefined && s.length != undefined && s.length > 0)
      Cu.reportError("  flt log1: " + s.length + " " + s);
  Cu.reportError("  flt log2: " + hdr.subject );

  //show all properties of hdr: uncomment to show.
  //let e = hdr.propertyEnumerator;
  //while ( e.hasMore() ) Cu.reportError("  flt log3: " + e.getNext() ); 

  //get body: from an example on MDC: getMessageBody(aMessageHeader)
  //Actions configured in the filter: Without [1], it takes long long time. 
  //    [1] copy msg to a local folder. 
  //    [2] "Javascript Action with Body" with this script. 
  { let messenger = Components.classes["@mozilla.org/messenger;1"]
                      .createInstance(Components.interfaces.nsIMessenger);
    let listener = Components.classes["@mozilla.org/network/sync-stream-listener;1"]
                      .createInstance(Components.interfaces.nsISyncStreamListener);
    let uri = hdr.folder.getUriForMsg(hdr);
    messenger.messageServiceFromURI(uri)
                .streamMessage(uri, listener, null, null, false, "");
    let folder = hdr.folder;
    let body = folder.getMsgTextFromStream(listener.inputStream,
                              hdr.Charset, 65536, 32768, false, true, { });
    //show body:
    Cu.reportError("  flt log4: " + body.length + " " + body);
  }
}

答案2

不,这似乎是不可能的。

这种处理可能在邮件服务器上最容易完成,例如进程邮件快递投递amavisd-新, ETC。

Amavisd-new 专门用于在投递之前将邮件传递给外部处理程序,通常是防病毒和反垃圾邮件守护程序。

如果您无法在服务器端执行此操作,则需要编写扩展,但这可能工作量太大。

最后,也许你可以用菲塔奎拉扩展,支持正则表达式、运行外部程序和 JavaScript 操作。您可以在作者页面

就我个人而言,如果我无法访问邮件服务器,并且 FiltaQuilla 不能满足我的需求,我会选择设置本地 Postfix / IMAP 邮件服务器,从 ISP 获取邮件,并在发送之前使用我的自定义脚本对其进行处理。这应该比编写 TB 扩展容易得多。但这可能超出您的需求。

答案3

您可以寻找具有所需脚本过滤功能的 POP3/IMAP 代理。它可以是与 Thunderbird 在同一台 PC 上运行的代理。

答案4

使用扩展: http://mesquilla.com/extensions/filtaquilla/

你可以创建 JavaScript 和/或外部文件来执行,所以它看起来像一个可靠的“可能”

相关内容