Thunderbird:过滤器与链接不匹配

Thunderbird:过滤器与链接不匹配

我使用过滤器来删除不需要的消息(除了集成的垃圾邮件过滤器)。

我的问题是,多年来(我曾经使用过的每个 Thunderbird 版本,甚至是最新版本)都无法过滤链接
例如,我想删除所有包含以下链接的消息:http://xxxxx.emv3.com/xxxxxx
我从来没有设法删除这些电子邮件。我在正文上使用过滤器,检查它是否包含 emv3,但这从未匹配。这些电子邮件采用 HTML 格式,链接显示为文本,如“访问我们的网站”。

如果我写一封带有链接的 HTML 邮件,我的过滤器就会起作用。但
如果这是一封垃圾邮件,它就永远不会起作用。

当我将电子邮件保存为文本文件时,我用记事本打开它,然后看到几个http://xxxxx.emv3.com/xxxx

知道为什么这不起作用以及我该怎么办吗?

答案1

您可以使用 thunderbird 插件菲塔奎拉

安装扩展后,您可以在附加选项中激活所需的所有过滤操作和搜索词(Thunderbird→工具→附加组件→FiltaQuilla→选项)。截至撰写本文时,这些是当前版本提供的选项。

在此处输入图片描述

在此处输入图片描述

你肯定想看看作者网站探索所有可能性并找出如何使用正则表达式过滤器和所有其他好东西。

这是一个(非常简单的)全能电子邮件地址模式的典型示例,该模式仅接受 @ 前面至少包含一个点的地址。您还可以看到这些规则的一些例外情况,这些例外适用于本地地址簿中的发件人和不遵循秘密模式的旧地址。

例子

这是一个很棒的 Thunderbird 插件。希望它能有所帮助。

如果这不符合您的需求,您可以使用垃圾邮件使用 RegExFilter 插件检测垃圾邮件。但是,要使垃圾邮件检测有效,您必须对其进行“训练”。

垃圾邮件控制

消息过滤器

答案2

它不起作用,因为过滤器(以及 FiltaQuilla 的当前版本)在过滤时只能看到 HTML 代码的文本表示(如果有的话),因为对于某些文件夹(离线 IMAP 文件夹),它们只能看到消息头。

我真的不知道为什么 Thunderbird 中的默认过滤器不允许用户过滤原始正文,我猜是因为没有人要求这样做。另外,我不知道为什么像 FiltaQuilla 这样的复杂插件不提供开箱即用的原始正文访问。同样,也许是因为缺乏用户的兴趣。

所以,我可以告诉你如何使用 FiltaQuilla 来实现,但你不会喜欢它。它很乱、很老套、很慢、很脆弱,而且一点也不方便用户使用。但这是可能的。它在我的电脑上可以运行。它应该在你的电脑上也可以运行。当然,除非 Thunderbird 崩溃并损坏了你的邮箱(因为我测试时这里发生过一次,所以它再也没有在那个文件夹中起作用了)。令人惊讶的是,它在我的 IMAP 文件夹中完美地工作。所以把它看作是一个实验,而不是最终的解决方案。

如果您已经拥有 FiltaQuilla,请在“首选项”窗口的“搜索词”选项卡中启用 Javascript(重新启动 Thunderbird)。

现在像往常一样创建一个过滤器,在搜索内容列表中查找 Javascript。在下一个列表中选择匹配。将有一个编辑图标,选择它并插入以下代码(注意:此代码基于 Thunderbird 源代码中包含的一些测试):

let mylist = ["emv3.com", "_blank", "tumblr.com", "xxxx"];
var matchfound = -1;
const MAX_MESSAGE_LENGTH = 10240;
let msgFolder = message.folder;
let msgUri = msgFolder.getUriForMsg(message);
let messenger = Cc["@mozilla.org/messenger;1"].createInstance(Ci.nsIMessenger);
let streamListener = Cc["@mozilla.org/network/sync-stream-listener;1"].createInstance(Ci.nsISyncStreamListener);
messenger.messageServiceFromURI(msgUri).streamMessage(msgUri, streamListener, null, null, false, "", false);
let sis = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(Ci.nsIScriptableInputStream);
sis.init(streamListener.inputStream);
let rawbody = sis.read(MAX_MESSAGE_LENGTH);
for (let listidx = 0; listidx < mylist.length; listidx++) {
  //Components.utils.reportError("Checking " + mylist[listidx] + " in " + message.subject); 
  matchfound = rawbody.search(mylist[listidx]);
  if (matchfound>0) {
    Components.utils.reportError("Matched " + matchfound + " " + mylist[listidx] + " in " + message.subject); 
    break;
  }
}
(matchfound>0)

您看到“let mylist ="”行了吗?这是一个 Javascript 数组。您可以用要搜索的文本字符串填充它。您看到 MAX_MESSAGE_LENGTH=10240 了吗?这就是此代码将从邮件开头搜索多远。通常 10K 就足够了,因为垃圾邮件比包含图像或其他附件的垃圾邮件更大。

单击“确定”关闭编辑窗口。

定义您的操作(移动、删除、标记等)。

尝试运行它。

如果您在 Thunderbird 中启用了调试控制台,您可以在那里看到匹配项列表(这不是正常的过滤日志)。

最后需要注意的是,此脚本不会解码 Base64(或任何其他)编码。Base64 编码的消息不会匹配任何内容。

其他注意事项:在简要浏览 Thunderbird 源代码时,我认为贝叶斯过滤器可以访问原始消息正文,但我不知道这对您是否意味着什么。

因此,为了得到更好的答案,您的选择是:

  • 自己写一个插件。
  • 要求插件作者添加对原始主体访问的支持(FiltaQuilla 作者看起来是个好人,您可以在 FiltaQuilla 论坛询问)。

答案3

text/html您收到的任何 HTML 格式的电子邮件都将在邮件的实际正文中包含 Content-type:规范。

因此,请将过滤器更改为以下内容:

"Content-Type" "contains" "text/html"

现在您可以过滤以 HTML 格式发送的电子邮件。

要过滤 imap 帐户的消息,需要设置帐户以供离线使用。

为了设置离线使用的帐户:

  • 转到帐户设置>离线和磁盘空间。
  • 勾选“当我离线工作时,使我的收件箱中的邮件可用”。
  • 然后单击“选择供离线使用的文件夹”后选择临时文件夹。

希望这可以帮助。

相关内容