如何超简便地使用Linux命令行管理你的Gmail过滤器!

328 阅读2分钟

gmailctl命令行工具通过一个简单的基于标准的配置文件来管理电子邮件过滤器。

email or newsletters via inbox and browser

服务器端的邮件规则是预先分类和过滤邮件的最有效方法之一。可悲的是,Gmail,这个世界上最流行的邮件服务,并没有使用任何标准协议来允许用户管理他们的规则。添加、编辑或删除一条规则在网页界面上可能是一项耗时的工作,这取决于用户有多少条规则。公司提供的 "带外 "编辑它们的选项仅限于XML导出和导入。

我有109个邮件过滤器,所以我知道使用所提供的方法来管理它们是一件多么麻烦的事情。至少在我发现gmailctl之前,这个命令行工具可以用一个(相对)简单的基于标准的配置文件管理Gmail过滤器。

$ gmailctl test
$ gmailctl diff
Filters:
--- Current
+++ TO BE APPLIED
@@ -1 +1,6 @@
+* Criteria:
+ from: @opensource.com 
+ Actions: 
+ mark as important 
+ never mark as spam

$ gmailctl apply
You are going to apply the following changes to your settings:
Filters:
--- Current
+++ TO BE APPLIED
@@ -1 +1,6 @@
+* Criteria: 
+ from: @opensource.com 
+ Actions: 
+ mark as important 
+ never mark as spam
Do you want to apply them? [y/N]: 

为了以灵活的方式定义规则,gmailctl使用jsonnet模板语言。使用gmailctl ,用户还可以导出现有的规则进行修改。

要想开始,请通过你系统的软件包管理器安装gmailctl ,或者用go install github.com/mbrt/gmailctl/cmd/gmailctl@latest 从源码安装。随后,gmailctl init ,它将引导你完成在谷歌中设置你的凭证和正确的权限的过程。如果你在Gmail中已经有了规则,我建议接下来运行gmailctl download ,以便备份现有规则。这些将被保存在默认的配置文件~/.gmailctl/config.jsonnet 。将该文件复制到一个安全的地方,以备将来参考,或恢复你的旧规则,以防万一!

如果你想从一个干净的地方开始,或者你还没有任何规则,你需要创建一个新的、空的~/.gmailctl/config.jsonnet 文件。这个文件的最基本结构是。

local lib = import 'gmailctl.libsonnet';
{
  version: "v1alpha3",
  author: {
    name: "OSDC User",
    email: "your-email@gmail.com"
  },
  rules: [
    {
      filter: {
        or: [
          { from: "@opensource.com" },
        ]
      },
      actions: {
        markRead: false,
        markSpam: false,
        markImportant: true
      },
    },
  ]
}

正如你所看到的,这个文件格式与JSON 相似,但没有那么严格。这个文件设置了一个简单的规则,将任何来自opensource.com 的邮件标记为重要邮件,不读,也不标记为垃圾邮件。它通过在filters 部分定义标准,然后在actions 部分定义应用的规则来实现这一目的。行动包括以下布尔命令。markRead,markSpam,markImportant, 和archive 。你还可以使用动作来指定邮件的category ,并指定文件夹,我们将在文章的后面提到这些。

一旦文件被保存,就可以用gmailctl test 来验证配置文件的格式。如果一切正常,那么你就可以用gmailctl diff 来查看要做的修改,用gmailctl apply 来将你的新规则上传到Gmail。

$ gmailctl diff
Filters:
---
Current
+++ TO BE APPLIED
@@ -1,6 +1,8 @@
* Criteria:
from: @opensource.com Actions:
+ archive
  mark as important
  never mark as spam 
+ apply label: 1-Projects/2022-OSDC

$ gmailctl apply -y 
You are going to apply the following changes to your settings:
Filters:
--- Current
+++ TO BE APPLIED 
@@ -1,6 +1,8 @@ 
* Criteria:
  from: @opensource.com Actions: 
+ archive
  mark as important 
  never mark as spam
  apply label: 1-Projects/2022-OSDC

Applying the changes...

如前所述,新邮件信息可以通过在配置中设置标签来自动归档。我想把所有来自Opensource.com的邮件分配到一个专门的文件夹里,并把它们从收件箱中移除(用Gmail的话说就是archive )。要做到这一点,我将把actions 部分改为。

  actions: {
        markRead: false,
        markSpam: false,
        markImportant: true,
        archive: true,
        labels: [
          "1-Projects/2022-OSDC"
        ]
      },

正如你在上图中看到的,gmailctl diff ,现在只显示将要改变的内容。为了应用它,我用gmailctl apply -y ,跳过确认提示。如果这个标签不存在,那么就会给出一个错误,因为不能为一个不存在的标签做一个过滤器。

你还可以制定更复杂的规则,针对特定条件或多个电子邮件。例如,下面的规则使用一个and 条件来寻找来自Cloudflare ,但不是购买确认的信息。

 filter: {
        and: [
          { from: "noreply@notify.cloudflare.com" },
          { subject: "[cloudflare]" },
          { query: "-{Purchase Confirmation}" }
        ]
      },

在对多封邮件执行相同操作的规则的情况下,你可以使用一个or 结构。我使用这个方法将所有与桌面游戏有关的邮件归入一个文件夹。

 filter: {
        or: [
          { from: "no-reply@obsidianportal.com" },
          { from: "no-reply@roll20.net" },
          { from: "team@arcanegoods.com" },
          { from: "team@dndbeyond.com" },
          { from: "noreply@forge-vtt.com" },
          { from: "@elventower.com" },
          { from: "no-reply@dmsguild.com"},
          { from: "info@goodman-games.com" },
          { from: "contact@mg.ndhobbies.com" },
          { from: "@monkeyblooddesign.co.uk" },
        ]
      },

对于拥有多个Gmail账户的人,需要他们自己的规则集,你可以用--config 命令行参数为他们指定一个独特的配置文件。例如,我的工作使用Gmail,我有一整套其他的规则用于此。我可以创建一个新的gmailctl 目录,并将其用于工作配置,像这样。

$ gmailctl --config ~/.gmailctl-work/ diff

为了让我自己更轻松,我有两个shell别名,以明确我在使用哪种配置。

alias gmailctl-home="gmailctl --config $HOME/.gmailctl"
alias gmailctl-work="gmailctl --config $HOME/.gmailctl-work"

gmailctl 的一个缺点是,它不会将新的过滤器应用于现有的邮件,所以你仍然必须在做gmailctl apply 之前对收到的邮件进行手动操作。我希望他们能在将来解决这个问题。除此之外,gmailctl ,让我能够快速地添加和更新Gmail的过滤器,而且几乎是完全自动的,我可以使用我最喜欢的电子邮件客户端,而不需要不断地回到Web UI来改变或更新过滤器。