Como posso fazer com que o exim entregue uma única mensagem recebida para vários maildirs locais?

2

Estou mantendo um servidor IMAP executando o FreeBSD, que usa o exim 4.80 como seu MTA. Agora eu tento criar um alias de e-mail para que eu possa abordar todos os usuários do sistema para informá-los sobre interrupções programadas e afins. A ideia é que um email para [email protected] seja encaminhado para todos os usuários no sistema.

Inicialmente, considerei ter uma simples entrada /etc/aliases , mas notei que não é o que eu quero, pois os usuários do sistema podem ter filtros de peneira que eliminam todos os e-mails recebidos, exceto alguns na lista branca.

Eu notei que o exim pode ser enviado imediatamente para um diretório local do Maildir (ignorando qualquer outro MDA e, portanto, ignorando os filtros do Sieve) usando o transporte appendfile - mas como posso fazer um único e-mail de entrada para vmailusers ser redirecionado para vários maildirs locais ?

    
por Frerich Raabe 20.09.2012 / 08:58

1 resposta

1

Você pode usar o roteador de redirecionamento para processar mensagens de alias. Este também é o que executa scripts / arquivos de encaminhamento fornecidos pelos usuários. O processamento dos roteadores acontece de cima para baixo, então o exemplo abaixo funciona mais ou menos assim:

  1. O roteador syswide_alias verifica os aliases no arquivo /etc/aliases . Se um for encontrado, a seqüência de roteamento será reiniciada.
  2. O forced_delivery faz a mesma verificação, mas desta vez usa a variável original_local_part que está vazia se nenhum encaminhamento foi feito. Se a pesquisa for bem-sucedida, a mensagem será entregue. Nesse caso, o processamento é interrompido (desde que uma entrega foi feita), portanto, quaisquer filtros ou encaminhamentos que o usuário possa ter são ignorados.
  3. Se o roteador forced_delivery recusar, o arquivo .forward será processado. Se esse arquivo contiver aliases, a seqüência de roteamento será reiniciada.
  4. Finalmente, a mensagem é entregue na caixa de correio do usuário. Isso acontecerá somente se o arquivo de filtro na etapa anterior não resultar em uma entrega significativa (ou seja, não contiver um alias de encaminhamento ou não soltar totalmente a mensagem).

A seção routers deve ter esta aparência:

syswide_alias:
    driver = redirect
    allow_defer
    allow_fail
    data = ${lookup{$local_part}lsearch{/etc/aliases}}

forced_delivery:
    driver = accept
    allow_defer
    transport = local_delivery
    condition = ${if eq {${lookup{$original_local_part}lsearch{/etc/aliases}}}{}{no}{yes}}

user_filters:
    driver = redirect
    allow_defer
    allow_fail
    allow_filter
    file = ${home}/.forward

normal_delivery:
    driver = accept
    check_local_user
    transport = local_delivery

Os roteadores syswide_alias e forced_delivery têm a opção allow_defer , que é necessária se o arquivo não for encontrado (o que provavelmente não será o caso, mas não faz mal) / p>

Editar: O exemplo acima agora contém um conjunto completo de roteadores necessários para atingir os objetivos da pergunta.

    
por 20.09.2012 / 13:12