Exim4将经过validation的出站电子邮件复制到特定的地址

我为朋友和客户运行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 

希望能让你朝着正确的方向前进,祝你好运。