我为朋友和客户运行Exim 4邮件服务器。 我们刚给了我们8岁的儿子一个电子邮件function的设备,他使用这个服务器的出站和入站电子邮件。 所有出站电子邮件都将通过身份validation。
我有一个名为/etc/exim4/authenticated.users的文件,其中包含username:password对。 我的configuration中有这样的行:
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]
因此,当有人通过身份validation发送一封电子邮件为littlejohnny ,副本将发送到[email protected] 。
有谁知道如何做到这一点?
在你的validation器中,你应该有一个像server_set_id =的行。 无论该行右侧的内容都将存储在variables$authenticated_id 。 然后,这个variables可以在你的路由器中用来有条件地复制你的儿子的authentication用户名发送的消息。
它看起来像你使用的是Debian,或像Debian这样的Debian衍生产品。 请注意,Debian以特定于其分发的方式打包了Eximconfiguration文件。 因此,接收通用exim系统的build议并尝试将其应用到Debian系统可能会令人困惑。 也就是说,如果你真的希望它能够工作,并且阅读了关于他们的包装系统如何工作的debian文档,你可以使它工作。
如果不是很明显,我是一个非Debian-Exim的人,所以我的build议是通用的,你必须把它翻译成Debian的包装标准。
首先,你需要findauthentication者,并确保他们正在使用server_set_id选项。 这里是一个validation器的例子:
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
由于不同authtypes的变幻莫测,有时$auth1将持有用户名,有时候会是$auth2 。 如果您的系统一段时间没有更新,您可能还会看到$1和$2 ,这些是在添加了特定于auth的variables之前使用的。
现在,您已将validation用户的用户名保存到$authenticated_id ,只有当$authenticated_id与您的儿子的用户名相匹配时,才需要添加一个将邮件副本发送到您的地址的路由器。 因为路由器的顺序很重要,所以你需要在路由器中增加它,以确保你获得了所有的东西,但是你必须注意你自己的configuration来判断它到底在哪里。
下面是一个可以做你想做的例子的路由器:
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
希望能让你朝着正确的方向前进,祝你好运。