Назад | Перейти на главную страницу

Exim4 копирует аутентифицированную исходящую электронную почту на определенный адрес

Я запускаю почтовый сервер 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

Надеюсь, это поможет вам двигаться в правильном направлении, удачи.