Cada mensagem para um usuário local deve ir para um endereço que é obtido executando um comando externo. Esse comando examinará a tag de endereço local, fará chamadas de API para vários processos e, em seguida, calculará o endereço de destino.
Por exemplo, poderíamos usar um arquivo .forward no diretório inicial do usuário para enviar a mensagem ao comando (| comando), que então seria responsável pelo encaminhamento da mensagem também. "Um arquivo alias ou ~ / .forward pode listar qualquer combinação de comandos externos, nomes de arquivos de destino,: include: diretivas ou endereços de email." Veja: www.postfix.org/local.8.html Também: www.postfix.org/aliases.5.html
Talvez seja necessário ajustar apenas o cabeçalho Para e reenviar a mensagem via Postfix? Algo me diz que não é tão simples. O mais simples seria se o próprio Postfix lidasse com todo o trabalho de encaminhamento, como acontece quando o endereço de destino é gravado diretamente no arquivo .forward. Mas o endereço é desconhecido; só pode ser determinado pelo comando. Esse é o problema.
Além disso, se o endereço de destino não puder ser determinado, a mensagem deverá ser devolvida com um aviso de falha fornecido pelo comando.
Solução conforme implementada
Esta solução expande a resposta de Danila. Especificamente, ele redireciona o e-mail para certos usuários do wiki, conhecidos como "pipes" [2], transmitindo-o para "minders" que são designados no wiki [1]. Mas geralmente deve ser aplicável a qualquer retransmissão em que o endereço de destino é determinado dinamicamente por um script.
(a) No arquivo /etc/postfix/main.cf:
transport_maps = regexp:/etc/postfix/transport.regexp
# enable transport mapping based on regular expressions
minder_destination_recipient_limit = 1
# See SINGLE-RECIPIENT DELIVERY [3]. relay-to-minder (master.cf) can handle only a
# single recipient per delivery, and flags DO have the same limitation.
(b) No arquivo /etc/postfix/transport.regexp [4], faça o mapeamento de transporte:
if /^pipe\+.+@zelea\.com$/
# relay all deliveries for pipe users [2] ...
!/^pipe\+bounceSpam@/ minder:
# ... except 'bounceSpam' deliveries, via master.cf 'minder' service
endif
(c) No arquivo /etc/postfix/master.cf, defina o serviço 'minder':
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
minder unix - n n - 1 pipe
flags=DO user=pipe argv=/usr/local/libexec/relay-to-minder ${sender} ${recipient}
# With maxproc 1 because it's sufficient, let Postfix do all queuing.
# Both flags D and O (adding headers Delivered-To and X-Original-To) require main.cf
# minder_destination_recipient_limit=1 [3]
(d) Torne o script relay-to-minder executável pelo usuário (pipe) especificado em master.cf user =. O conteúdo do script (incluindo a versão mais recente dessas notas de configuração) está localizado em link
O script endereça novamente os cabeçalhos de destino (ainda não tem certeza de que é apropriado), endereça novamente o envelope e o envia de volta ao MTA para entrega final.
Notas
[1] zelea.com/w/Property:Minder
[2] zelea.com/w/Category:Pipe
[3] Esse significado de "pipe" difere de [2]. www.postfix.org/pipe.8.html
[4] www.postfix.org/transport.5.html | www.postfix.org/regexp_table.5.html
Perdoe os links mungados. Eu não ganhei pontos brownie suficientes.