Por fim, consegui encontrar uma solução que funciona bem, embora seja uma abordagem em duas etapas.
Primeiro, modifiquei a configuração do daemon de política (postfix cluebringer v2) para retornar a diretiva PREPEND em vez de HOLD. Estou adicionando um cabeçalho especial, que será avaliado posteriormente: PREPEND X-cust-policy: Hold
. Isso funciona mesmo com a combinação com o filtro proxy anterior à fila.
Em segundo lugar, usei a diretiva header_checks
pcre:/etc/postfix/header_hold
no main.cf
para verificar o meu adicionado mais tarde. Essa verificação é avaliada pelo daemon cleanup(8)
antes que o e-mail entre na fila. Então, depois que o email é passado através de todas as verificações, incluindo o daemon de política, ele é passado pelo filtro de fila anterior e, em seguida, é processado pelo cleanup(8)
daemon. Normalmente, ele deve colocar a mensagem na fila incoming , mas quando encontrar esse cabeçalho, o email é colocado diretamente na fila hold .
Aqui está o conteúdo da tabela PCRE do arquivo /etc/postfix/header_hold
:
### PCRE format, no postmap command!
# Hold all email with specified header (which is inserted by policy service)
/^X-cust-policy: Hold/ HOLD
A única ressalva é que a verificação baseada em cabeçalho também será acionada em emails devolvidos não entregues (mas isso não acontece com frequência que o email liberado da fila hold será devolvido).
Também tive que atualizar o webui do cluebringer para suportar a ação PREPEND para o módulo Quotas, embora o próprio daemon já o suporte (a versão no Debian wheezy).