在 Debian 上设置邮件服务器仅将其重定向到解析器脚本

在 Debian 上设置邮件服务器仅将其重定向到解析器脚本

我有一台运行 Debian 的服务器 (example.com),它没有配置为接收电子邮件(或者至少我从未为此做过任何努力)。据我所知,我只需要创建指向 example.com 的 MX DNS 条目即可接收电子邮件。

现在,一旦我收到电子邮件,我希望将标题和正文传输到一个脚本(可能是 Go),该脚本将解析内容并将其添加到数据库。

我听说我可以使用 procmail,但这就是我所需要的吗?我不需要设置一些可以接收来自 MX 路由的电子邮件的东西吗?

PS:看起来 postfix 正在我的服务器上运行(执行 ps aux 后),这是我的 MDA 吗?我必须配置它才能为其添加一些 procmail 魔法吗?

答案1

如果 Postfix 配置正确,它将知道如何运行 Procmail。只需创建一个简单的.procmailrc文件并向自己发送一条消息。详细指导,例如http://www.iki.fi/era/mail/procmail-debug.html但是在花时间回答这个问题之前,请先通读一遍;最后一段建议您不要这样做。

您不一定需要 Procmail 来实现这一点;我相信您可以配置 Postfix 来直接写入您的 Go 程序。但除非您的程序具有极强的抗故障能力,否则 Procmail 提供的安全框架至少在开发期间可用作安全网。

要将用户帐户的每封邮件的副本[email protected]作为标准输入传输到goprogram,帐户所有者/home/you/.procmailrc只需要

# If goprogram is in a nonstandard directory,
# add it to PATH
PATH=$HOME/go/bin:$PATH

:0c
| goprogram

显然,请确保您具有执行权限goprogram,并且您的PATH目录中包含安装目录。(您显然可以通过管道传输到/path/to/goprogram并保留PATH原样,但如果事情变得不简单,您需要避免.procmailrc在每个二进制文件中都使用硬编码路径。与在 shell 中一样,Procmail 的默认设置PATH列出了许多标准的系统范围位置,例如/bin:/usr/bin:/usr/local/bin等。)

c标志使 Procmail 将其视为次要目的地,因此每条消息也将写入默认收件箱/var/mail/you(或者Maildir现在可能是用户主目录中的)。一旦您确信goprogram不会丢失邮件(测试磁盘已满、内存不足等),您就可以取出c并最终直接从 Postfix 运行它master.cf,并摆脱 Procmail 和 Unix 用户帐户,you转而使用虚拟用户。

从技术上讲,Postfix 是您的 MTA 和 MSA;它知道如何使用 Procmail(或 Maildrop,或一堆其他替代方案)作为 MDA。为了拥有 MX 记录,您需要在 MX 指向的主机上有一个 MTA。正确配置的 Postfix 只需要被告知它应该接受哪个域名的入站流量(基本上myoriginrelay_domains,但应准备好充当主 MX

如果您不熟悉这个领域的很多内容,您可能应该完全避免运行自己的邮件服务器。例如,Amazon SES 允许您轻松地对每封传入邮件运行您的脚本,而不必担心稳定、安全的电子邮件服务带来的相当大的管理负担和高昂的学习曲线。

相关内容