Como configurar o Postfix para apenas enviar e-mails com um determinado cabeçalho?

5

Estou configurando uma VM de desenvolvimento local e consegui redirecionar todos os e-mails enviados para uma caixa de correio local usando virtual_alias_maps com a entrada /.*/ username .

O que eu gostaria de adicionar é uma opção para não redirecionar e-mails para a caixa de correio local se o e-mail contiver um determinado cabeçalho.

Ou em outras palavras; se um determinado cabeçalho for encontrado no email de saída, envie-o, mas se o cabeçalho estiver ausente, ele deverá ser redirecionado para a caixa de correio local.

Como eu conseguiria isso usando o Postfix?

Muito obrigado pela sua ajuda!

    
por Thasmo 19.02.2014 / 21:13

2 respostas

1

Primeiro, definimos dois processos smtpd em master.cf , aquele com reescrita ativada e o outro com reescrita desativado. O SMTPD com reescrita ativada existia por padrão no master.cf. Agora vamos essas linhas

127.0.0.1:2525 inet n  -       n         -       2000     smtpd
    -o receive_override_options=no_header_body_checks,no_address_mappings

Isso ativará outro processo smtpd

  • Ouça na porta IP do host local 2525
  • Com o recurso header_checks e o recurso de reescrita desativado.

Aqui o pseudocódigo do seu pedido

if header exist (postfix will checks via header_cheks)
    no rewrite 
else
    rewrite with virtual_alias_maps

Implementaremos essa lógica com header_checks .

Adicione esta linha em main.cf

 header_checks = regexp:/etc/postfix/mycustomheader

Conteúdo de /etc/postfix/mycustomheader

/^X-Your-Header/  FILTER smtp:[127.0.0.1]:2525

Como funciona

Sempre que o postfix detectar X-Your-Header nas suas mensagens, ele redirecionará o email para o segundo processo smtpd, conforme definimos anteriormente. Se o cabeçalho não existir, seu e-mail passará pelo processo smtpd padrão com a reescrita ativada.

    
por 26.10.2014 / 04:35
1

Scapping pseudocode de tpml7

if header exist (postfix will checks via header_cheks)
    no rewrite --> different instance
else
    rewrite with virtual_alias_maps same instance

O postfix do AFAIK pode redirecionar o e-mail se houver um determinado cabeçalho. Veja o recurso REDIRECT em man header_checks .

Infelizmente, com base no pseudocódigo acima, sua solicitação está redirecionando o e-mail se determinado cabeçalho não existir . Eu já tentei algumas soluções simples. Mas como sua solicitação não foi diretamente suportada, essa solução foi um pouco complicada. Especialmente, essa solução exigia o aprendizado sobre múltiplas instâncias do postfix .

Vou escrever o esboço aqui - não exatamente passo a passo -, fique à vontade para perguntar se algo ainda é vago.

Para isso, você precisa de duas instâncias múltiplas. A primeira instância está fazendo header_checks, a segunda instância está fazendo a saída normal.

A primeira instância terá dois daemon smtpd definidos em master.cf . Um daemon (padrão) escuta em *: 25, o segundo escuta em 127.0.0.1:12525.

A segunda instância escutará em 127.0.0.1:22525

Primeira instância

##main.cf

# your header filter
header_checks = pcre:/path/to/header_checks

# no rewriting
receive_override_options = no_address_mappings

# send to second instance
relayhost = [127.0.0.1]:22525
virtual_alias_maps = pcre:/your/catch-all

##master.cf

# second smtpd but with rewriting enabled
[127.0.0.1]:12515 inet  n       -       n       -       -       smtpd
    -o receive_override_options=

# /path/to/header_checks
/^MyHeader/  FILTER smtp:[127.0.0.1]:12525

segunda instância

Basta configurar como a primeira instância postfix sem header_checks, relayhost, virtual_alias_maps e receive_override_options (instalação normal do postfix). Defina master.cf, então é só ouvir em [127.0.0.1]: 22525. Defina myhostname para que seja diferente na primeira instância.

    
por 07.01.2015 / 08:48