我为朋友和客户运行了 Exim 4 邮件服务器。我们刚刚给了我们 8 岁的儿子一台可以收发电子邮件的设备,他使用这个服务器发送和接收电子邮件。所有发送的电子邮件都经过身份验证。
我有一个名为的文件/etc/exim4/authenticated.users
,其中包含username:password
对。我的配置中有如下几行:
accept
authenticated = *
myserver_cram:
driver = cram_md5
public_name = CRAM-MD5
server_secret = ${lookup{$1}lsearch{/etc/exim4/authenticated.users}{$value}fail}
server_set_id = $1
我想要的是这样的:
/etc/exim4/outgoing.copies littlejohnny:[email protected]
因此,当有人验证身份以发送外发电子邮件时littlejohnny
,会将副本发送至[email protected]
。
有人知道如何实现这一点吗?
答案1
在您的身份验证器中,您应该有一行类似server_set_id =
。该行右侧的任何内容都将存储在变量 中$authenticated_id
。然后可以在路由器中使用该变量有条件地复制您儿子的经过身份验证的用户名发送的消息。
在我看来,您使用的是 Debian,或者像 Ubuntu 这样的 Debian 衍生产品。请注意,Debian 以特定于其发行版的方式打包 Exim 配置文件。因此,收到通用 exim 系统的建议并尝试将其应用于 Debian 系统可能会令人困惑。也就是说,如果您真的希望它工作,并且您阅读了有关其打包系统如何工作的 debian 文档,您就可以让它工作。
如果不太明显的话,我不是 Debian-Exim 的用户,所以我的建议是通用的,你必须将其转化为 Debian 的包装标准。
首先,您需要找到身份验证器并确保它们正在使用该server_set_id
选项。以下是示例身份验证器:
auth_plain:
driver = plaintext
public_name = PLAIN
server_condition = ${if eq {$3}{AUTH_STR}{yes}{no}}
server_advertise_condition = ${if eq{$tls_cipher}{}{no}{yes}}
server_set_id = $auth2
由于不同身份验证类型的变化,有时$auth1
会保存用户名,有时会保存用户名$auth2
。如果您的系统有一段时间没有更新,您可能还会看到$1
和$2
,它们是在添加身份验证特定变量之前使用的。
现在您已将经过身份验证的用户的用户名保存到 中$authenticated_id
,您需要添加一个路由器,只有当$authenticated_id
您儿子的用户名匹配时,它才会将邮件副本发送到您的地址。由于路由器的顺序很重要,您需要将其添加到路由器中相当高的位置,以确保获得所有内容,但您必须观察自己的配置以判断将其放在何处。
这是一个可以完成您需要的操作的示例路由器:
copy_jrs_mail:
driver = redirect
data = [email protected]
condition = ${if eq{$authenticated_id}{littlejohnny}{yes}{no}}
unseen
要执行相同的操作但从文件中查找信息,您实际上可以删除条件(因为$authenticated_id
在文件中将达到相同的目的)并更改部分data =
以使用文件:
copy_auth_mail:
driver = redirect
data = ${if exists{/etc/exim4/outgoing.copies}{\
${lookup{${lc:$authenticated_id}}lsearch{/etc/exim4/outgoing.copies}}}}
unseen
希望这能让你朝着正确的方向前进,祝你好运。