我希望用内部安装来替换我们目前使用的外部 smtp 提供程序。它应该处理以下情况:
某些地址应转发到 gmail 地址;我们希望继续使用 gmail 作为我们的主要电子邮件界面。
其他地址应可用作 pop/imap 邮箱。
其他地址将以编程方式处理:它们将启动各种任务、登录等。这些地址应该启动处理电子邮件地址的过程,或者应该以易于处理的格式存储。
它还应该可以很容易地使用域密钥、spf 以及允许电子邮件传递所需的任何其他内容进行配置。
我在遥远的过去使用过sendmail。如今,似乎 postfix 和 exim 是推荐的选项。我的主要问题是:将地址转发到 gmail 和编程访问的最佳选择和设置是什么?procmail 仍然是要走的路还是现在有更好的选择?
我们正在使用 linux/ubuntu 服务器。
Postfix 是可靠的,得到很好的支持并且易于配置。你描述的所有东西都是相当常规的。
对于程序化的东西,你必须知道程序/脚本将以什么 UID 运行。
例如,对于 postfix,从 /etc/aliases(或任何其他 root 拥有的别名文件)运行的脚本将以 'nobody' 用户身份运行。
postfix 能够拥有多个别名文件,并且(这是好的部分)从别名文件运行的程序将以拥有该文件的用户身份运行(root 除外 - 如前所述,root 拥有的别名文件以无人身份运行)。
如果您需要以 root 身份从邮件运行脚本,那么最简单的方法(如果您安装了 sudo)是将 sudo 配置为允许“nobody”以 root 身份运行它而无需密码,并从运行的包装脚本运行它它与 sudo。
注意:无论何时从邮件触发脚本,您都必须记住数据(即邮件)来自不受信任的来源(互联网)......所以使用来自正文或标题的数据是非常不安全的脚本执行的命令的参数。这与在 CGI 脚本中信任用户提供的数据基本相同——只是不要这样做。例如,考虑如果用户提供的数据类似于“... innocuousdatahere ...; rm -rf /”,那么一个写得不好的脚本会做什么。您可能认为检查分号之类的明显内容并将其删除会很容易,但是您还需要检查很多不明显的内容,而您只是为自己做准备失败,因为你不太可能想到或抓住它们。
无论脚本将以什么 UID 运行,这都很重要,但当/如果它以 root 身份运行时尤其重要。
最后,要回答您的一个直接问题,procmail 仍然是您想做的有用工具。就像 maildrop 和其他类似的程序一样。将 procmail 等视为解析正文和标题以决定做什么的专用工具,因此您不必在脚本中包含所有解析代码。编写脚本以完成其工作,并使用 procmail 决定何时运行脚本。例如,您可以创建一个名为“mailjobs”的新用户,它有自己的主目录和 .procmailrc 文件。然后创建将邮件转发给该用户的别名。然后,mailjobs 的 .procmailrc 将检查 X-Original-To 标头以确定要运行的脚本。
exim 和 postfix 都能够满足您的需求,最好的建议是选择最容易使用和/或最熟悉的一个。
至于处理转发到 gmail 和脚本的最佳方法是使用全局别名文件(通常保存在 /etc/aliases 或 /etc/mail/aliases 中)。