当邮件处理不再耗电:OpenSMTPD与Maildrop的完美协作
在OpenBSD系统中,处理邮件过滤的方式多种多样,但有时候,针对特定需求,使用专门的工具会更加得心应手。过去,procmail曾是这一领域的霸主,但自2001年9月10日最后一次更新后,我们更倾向于选择那些仍在积极维护的工具。
Maildrop:邮件过滤的新选择
Courier邮件服务器提供了众多工具,即便你已经有了依赖的邮件传输代理(MTA),你仍然可以轻松使用其中的一些高级功能。我们选择了maildrop(1),它在OpenBSD上安装后,提供了丰富的过滤选项、邮件投递代理(MDA)以及一些MIME构建程序等。安装命令如下:
# pkg_add maildrop # 注意:选择非postfix的包即可
我们倾向于在“投递”模式下使用maildrop(5),即MDA监听一个套接字,你可以像其他服务一样启动、停止或重启它。你也可以在手动模式下尝试maildrop(5),或者选择第三种模式:嵌入式模式。
我们非常喜欢这个项目的明确性、文档的精细程度以及邮件列表中多年积累的实用解决方案。然而,关于如何快速上手的简明指南却不多见,这似乎成了现代技术文档的常态。此外,AI聊天机器人在此方面也显得力不从心,常常给出不准确的建议。
轻量级配置
由于maildrop(5)对配置要求非常严格,以下配置不仅是建议,更是规则(大部分情况下)。如果某些权限设置不当,maildrop(5)将无法运行。这是出于安全考虑,我们对此表示理解和支持。
在“投递”模式下,普通用户需要在其主目录下创建一个权限为‘0600’的‘~/.mailfilter’文件。文件名不可更改,至少默认情况下如此。此外,该文件必须由该用户拥有。
这是邮件的“过滤器”,它可以非常复杂,从简单的“自动回复”到邮件内容的深度处理,比如我们在Whenhen.com所做的那样。maildropfilter(7)是一种图灵完备的语言,因此你可以放心,它能够满足你的所有需求。
以下是一个简单的‘.mailfilter’配置示例,它根据发件人邮箱地址将邮件归档到主目录下名为‘.vip’的Maildir目录中:
if (/^From:.*vip@foo.com/)
{
to .vip
}
如果‘.vip’不是一个真正的Maildrop目录,maildrop(5)会发出警告。因此,请按照以下方式设置:
cd ~
mkdir -p .vip/{cur,new,tmp}
同时,你也可以在主目录下创建一个名为‘.maildir’的常规Maildir目录,用于存放其他邮件:
mkdir -p .maildir/{cur,new,tmp}
当maildir(5)在“投递”模式下运行时,调试选项需要通过系统配置文件‘/etc/courier/authdaemonrc’来设置。虽然其他模式下可以使用‘-V K’标志,但在“投递”模式下无效。因此,必须通过‘rc’文件进行配置。该文件同样需要设置为‘0600’权限,并由‘root:wheel’拥有。
你可以通过这个‘rc’文件让调试信息尽可能详细,或者像我们一样,在“手动”模式下测试,直到一切运行顺畅。在“投递”模式下开启调试后,你可以通过tail -f /var/log/messages
来跟踪日志信息。
准备守护进程
maildrop(5)的守护进程名为‘authdaemond’,位于‘/usr/local/sbin’目录下。是的,它被称为“守护进程的守护进程”。这是第一次见到这样的命名!
它以root身份运行,并将‘pid’文件写入‘/var/run/courier-auth’目录。因此,最好在忘记之前创建这个目录,以免maildrop(5)报错:
# mkdir /var/run/courier-auth
你可以在‘/etc/courier/authdaemonrc’文件中调整这一设置,但默认配置并无不妥。
最后,一个简单的启动守护进程的方法是在root的crontab(1)中添加一行,如下所示:
@reboot /bin/sh /usr/local/sbin/authdaemond start
...
更多有趣的信息可以从安装‘README’中获取,点击这里。
SMTPD配置
幸运的是,OpenBSD团队使得与自定义MDA的协作变得轻松。以下是一个示例配置:
...
action "vip" mda "/usr/local/bin/maildrop -d %{dest.user:lowercase}"
match from any mail-from "vip@foo.com" for any act