Exim4 copiar e-mail de saída autenticado para um endereço específico

2

Eu corro um servidor de correio Exim 4 para amigos e clientes. Acabamos de dar ao nosso filho de 8 anos um dispositivo capaz de enviar e-mails e ele usa esse servidor para e-mails enviados e recebidos. Todo o email enviado é enviado autenticado.

Eu tenho um arquivo chamado /etc/exim4/authenticated.users que contém username:password pares. Eu tenho linhas na minha configuração assim:

  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

O que eu gostaria é de ter um arquivo como este:

/etc/exim4/outgoing.copies littlejohnny:[email protected]

Para que, quando alguém se autenticar para enviar um email de saída como littlejohnny , uma cópia será enviada para [email protected] .

Alguém sabe como conseguir isso?

    
por andyjeffries 09.02.2011 / 12:11

1 resposta

1

No seu autenticador, você deve ter uma linha como server_set_id = . O que estiver no lado direito dessa linha será armazenado em uma variável $authenticated_id . Essa variável pode ser usada em seus roteadores para copiar condicionalmente as mensagens enviadas pelo nome de usuário autenticado do seu filho.

Parece-me que você está usando o Debian, ou um derivado do Debian como o Ubuntu. Por favor, esteja ciente de que o Debian empacota o arquivo de configuração do Exim de maneira específica à sua distribuição. Por causa disso, pode ser confuso receber conselhos para sistemas exim genéricos e tentar aplicá-lo a um sistema Debian. Dito isso, se você realmente quer que ele funcione e leia os documentos do Debian sobre como o sistema de empacotamento deles funciona, você pode fazê-lo funcionar.

Caso não seja óbvio, eu sou um cara não-Debian-Exim, então meu conselho é genérico, você terá que traduzi-lo para os padrões de empacotamento do Debian.

Primeiro, você precisa encontrar os autenticadores e verificar se eles estão usando a opção server_set_id . Aqui está um autenticador de exemplo:

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

Por causa dos caprichos dos diferentes tipos de autenticação, às vezes $auth1 manterá o nome de usuário, às vezes será $auth2 . Se o seu sistema não foi atualizado por algum tempo, você também pode ver $1 e $2 , que foram usados antes que as variáveis específicas da autenticação fossem adicionadas.

Agora que você tem o nome de usuário do usuário autenticado sendo salvo em $authenticated_id , é necessário adicionar um roteador que envie uma cópia do e-mail para seu endereço somente se $authenticated_id corresponder ao nome de usuário do seu filho. Como a ordem dos roteadores é importante, convém adicioná-la bem alto em seus roteadores para garantir que você obtenha tudo, mas você terá que examinar sua própria configuração para avaliar exatamente onde colocá-la.

Veja um exemplo de roteador que faz o que você quer:

copy_jrs_mail:
  driver = redirect
  data = [email protected]
  condition = ${if eq{$authenticated_id}{littlejohnny}{yes}{no}}
  unseen

Para fazer a mesma coisa, mas procurar as informações de um arquivo, você pode realmente eliminar a condição (porque $authenticated_id no arquivo terá a mesma finalidade) e alterar a parte data = para usar um arquivo:

copy_auth_mail:
  driver = redirect
  data = ${if exists{/etc/exim4/outgoing.copies}{\
         ${lookup{${lc:$authenticated_id}}lsearch{/etc/exim4/outgoing.copies}}}}
  unseen

Espero que você esteja indo na direção certa, boa sorte.

    
por 09.02.2011 / 15:19

Tags