我们在我们的服务器上使用 Exim 仅从本地自动用户发送电子邮件,如 root、cron 等。
我们必须将每个可能的用户指定为/etc/email-addresses. 例如:
root: alert@example.com
cron: alert@example.com
backup: alert@example.com`
Run Code Online (Sandbox Code Playgroud)
这使我们能够接收生成的每封电子邮件。
问题是当我们出于任何原因添加用户时(例如,当我们添加一个包时,一些添加用户时),我们可能忘记将此用户添加到/etc/email-addresses. 大多数时候这不是问题,但这并不干净。而且整体方法不干净。
我们想将 Exim 配置为使用相同的源地址发送每封电子邮件。即每封发送的电子邮件来自alert@example.com
一种方法是使用通配符或正则表达式,/etc/email-addresses但不支持这种方式。
我目前不了解 Exim 不足以弄清楚如何以某种方式修改它。
理想情况下,Exim 应该/etc/email-addresses首先查看,如果不匹配,则使用预定义的地址。但这是非常次要的。
这个地址有两个地方用到:
1. 当 Exim 向FROM:smtp 服务器发送命令时
2. 头部内部
编辑:
重写部分是来自 Debian 的原始部分
begin rewrite
.ifndef NO_EAA_REWRITE_REWRITE
*@+local_domains "${lookup{${local_part}}lsearch{/etc/email-addresses} \
{$value}fail}" Ffrs
*@ETC_MAILNAME "${lookup{${local_part}}lsearch{/etc/email-addresses} \
{$value}fail}" Ffrs
.endif
Run Code Online (Sandbox Code Playgroud)
一个更好的方法:
修改重写部分:change lsearchby wildlsearch(两行要改)。这允许使用通配符和正则表达式/etc/email-addresses
所以/etc/email-addresses可以包含这种东西:
文件是从上到下处理的。所以如果一封电子邮件被发送到 root,它实际上被发送到 root@example.com。其他所有电子邮件都会发送到 alert@example.com
root: root@example.com
*: alert@example.com