自动化现在是一个热门话题。在我的日常工作中,作为 SRE,我的职责之一是尽可能地自动化重复性任务。但是,我们有多少人在日常非工作生活中这样做呢?今年,我专注于自动化消除繁琐的工作,以便我们可以专注于重要的事情。
服务器端邮件规则是预先分类和过滤邮件最有效的方法之一。遗憾的是,Gmail 是世界上最受欢迎的邮件服务,它没有使用任何标准协议来允许用户管理他们的规则。在 Web 界面中添加、编辑或删除单个规则可能是一项耗时的任务,具体取决于用户设置了多少规则。公司提供的“带外”编辑选项仅限于 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
,它将引导您完成在 Google 中设置您的凭据和正确权限的过程。如果您已经在 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
,但不如 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 来更改或更新过滤器即可使用我最喜欢的电子邮件客户端。
3 条评论