Я запускаю почтовый сервер 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:daddy@parent.somewhere
Так что, когда кто-то аутентифицируется для отправки исходящего электронного письма как littlejohnny
, копия отправляется по адресу daddy@parent.somewhere
.
Кто-нибудь знает, как этого добиться?
В вашем аутентификаторе должна быть строка вроде server_set_id =
. Все, что находится справа от этой строки, будет сохранено в переменной $authenticated_id
. Затем эту переменную можно использовать в ваших маршрутизаторах для условного копирования сообщений, отправленных аутентифицированным именем пользователя вашего сына.
Мне кажется, что вы используете Debian или производную от Debian, такую как Ubuntu. Имейте в виду, что 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 = daddy@parent.somewhere
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
Надеюсь, это поможет вам двигаться в правильном направлении, удачи.