Como coletar bounces no postfix

15

Isso está relacionado a essa pergunta:

linux - Formas de obter um relatório de bounceback para meu aplicativo de boletim informativo? - Falha do servidor

Digamos que eu esteja gerando endereços de e-mail assim quando envio boletins informativos para identificar rejeições e cancele a inscrição deles no boletim informativo: [email protected]

Eu suponho que eu usaria isso no caminho de retorno, certo?

Então, como eu configuraria no postfix para coletar todos esses endereços prefixados com "bounce-" em uma caixa de correio?

Finalmente, ouvi pessoas mencionarem um salto suave contra um salto strong. Alguém pode explicar os diferentes e como eles devem ser contados para saber quando remover permanentemente alguém de um boletim informativo por e-mail?

    
por Brian Armstrong 31.07.2009 / 00:07

3 respostas

17

A resposta exata para sua pergunta (manipular o endereço [email protected] ) depende de como seu servidor está configurado para receber e-mails. Se example.com for o domínio virtual, o melhor que você pode fazer é coletar as mensagens na caixa de correio [email protected] (assumindo recipient_delimiter = - ).

Se example.com for o domínio entregue localmente para o servidor (o email é entregue às contas reais do sistema), você poderá adicionar um arquivo .forward ao diretório inicial do usuário bounce , que entrega a um programa que analisa as informações de rejeição e as registra em um banco de dados ou arquivo. Veja man local para mais informações sobre o formato .forward e sobre como enviar para um programa.

O que fazemos, já que enviamos mensagens para um grande número de domínios, é usar bounces.example.com como nosso domínio VERP. Este domínio precisa ser adicionado a relay_domains . Crie /etc/postfix/transport_maps com este conteúdo:

bounces.example.com             bulkbounce:

Em seguida, anexe uma linha semelhante a esta para /etc/postfix/master.cf :

bulkbounce   unix  -       n       n       -       -       pipe
  user=nobody argv=/usr/local/bin/bounce_handler.py ${recipient}

O script bounce_handler.py aceita o endereço VERP como sua opção de linha de comando, analisa e faz as atualizações de banco de dados necessárias para registrar a devolução.

    
por 31.07.2009 / 21:07
11

Na verdade, a resposta do Instyle é muito difícil de implementar se você quiser oferecer suporte a muitos domínios diferentes e isso está errado porque:

a) Com o exemplo de transport_maps , todos os emails enviados para esse domínio são enviados para esse serviço específico sem considerar se os emails são e-mails devolvidos ou não. Como ele usa um nome de domínio específico, ele deve ser apenas um e-mail devolvido ... mas não pode ser garantido dessa maneira.

b) Os dados enviados para o seu script são o próprio e-mail e não a mensagem devolvida. Em outras palavras, seu código pode não ter ideia do motivo pelo qual o e-mail foi devolvido (ou seja, o retorno local enviará apenas o e-mail original).

A maneira correta de fazer essa configuração no postfix é usar a classe de notificação de rejeição.

1) Em /etc/postfix/main.cf

notify_classes = bounce
bounce_notice_recipient = [email protected]
transport_maps = hash:/etc/postfix/transport_maps

2) Em / etc / postfix / transport_maps

# when you make changes to this file, run:
#   sudo postmap /etc/postfix/transport_maps
[email protected] bulkbounce:

Como você pode ver, agora dizemos ao postfix para usar [email protected] sempre que um e-mail for devolvido. Em seguida, no mapa de transporte, use bulkbounce como o serviço para manipular qualquer endereço de e-mail para [email protected] .

Por fim, você pode definir bulkbounce com seu script:

3) Em /etc/postfix/master.cf

bulkbounce unix -       n       n       -       -       pipe
  flags=FRq user=bounce argv=/home/bounce/bin/snapbounce --sender ${sender} --recipient ${recipient}

Este script exige que você tenha um usuário. nobody é uma boa escolha também. Se você quiser ter um usuário específico, pode criá-lo com:

useradd bounce

Sem o script em master.cf , os emails são enviados para a conta de bulkbounce. Portanto, se você tiver um script que analise e-mails de arquivos, isso funcionará sem as alterações transport_maps e master.cf .

De um comentário abaixo:

fyi - re: double bounces...
if you're modifying the return address (VERP address such as [email protected], then you will want to comment out the line in main.cf for the bounce_notice_recipient, if you're interested in parsing the +id bounce only in your script.

    
por 12.11.2015 / 02:01
1

A maioria dos softwares de listas de discussão já sabe como lidar com mensagens VERP se o MTA estiver configurado corretamente para repassá-los ao software da lista de discussão. No caso do GNU Mailman você deve verificar o FAQ página apropriadamente chamada" Como eu uso o VERP com um - delimitador (Postfix recipient_delimiter)? ".

Se você está criando seu próprio software de newsletter personalizado para lidar com isso, pergunte-se por que você está reinventando a roda em vez de usar aplicativos existentes que podem lidar com a tarefa de maneira simples e fácil para você.

    
por 31.07.2009 / 03:39