Como limitar a quantidade de e-mails enviados pelo postfix para determinados domínios e controlá-los usando o cabeçalho de e-mail?

4

Meta

Estou procurando uma solução para limitar a taxa de e-mails enviados a um operador de e-mail específico (vários domínios de nível superior, todos eles que conheço) por hora. Eu também preciso de alguma forma para controlar a taxa por correio, para permitir uma quantidade maior de e-mails enviados pelo postfix durante cada hora. O limite é global para todos os endereços mantidos por esse operador, redefinindo cada hora completa.

O que eu fiz até agora

Eu uso o filtro personalizado postfix after_queue, procurando por nossa prioridade de cabeçalho personalizada. Número de mails aceitos pelo filtro são mantidos fora do script, dentro do banco de dados PostgreSQL. Os e-mails que se encaixam na cota do timeframe atual são passados para o postfix como aceito, a cota fora do e-mail é adiada usando o código de retorno do tempfail.

O SMTP relay usado para enviar e-mails para esse operador específico é uma máquina virtual separada, usada apenas para e-mails e rejeições limitadas do operador. A eficiência do filtro personalizado é suficiente de acordo com os requisitos.

Problema

Basicamente, existem dois problemas:

  1. Não consegui encontrar nenhuma maneira de priorizar as mensagens de email na fila do postfix. Seria preferível se eu pudesse usar nosso cabeçalho personalizado como indicador de prioridade ou adicionar outra marca de prioridade a uma mensagem de e-mail e ter a garantia de que ela será filtrada e enviada antes de mensagens sem prioridade. Pensei em usar várias instâncias (postmulti), mas as prioridades precisam ser relativas, numéricas - elas são usadas como modificador de cotas para emails externos. Basicamente: email com prioridade N usa 1 / N de cota usada por email sem prioridade. A priorização é um recurso interessante, para que possamos sair sem ela se as cotas com prazo definido funcionarem corretamente.
  2. Devido ao fato de os e-mails voltarem à fila após a aplicação do filtro, não é garantido que o e-mail será realmente enviado no prazo em que foi aceito. A fila do postfix parece impossível para orientar e controlar o rendimento real.

Minha ideia de solução

Do filtro personalizado pós-fila, em vez de retornar a mensagem para a fila do postfix, basta enviá-lo diretamente para o SMTP de destino usando outra ferramenta e ignorando totalmente o postfix. Não sei se existe algum cliente smtp pronto para uso disponível no Linux para realizar tais tarefas. Além disso, precisamos processar mensagens devolvidas síncronas (como resposta na comunicação SMTP) e assíncronas (como e-mails de status enviados para o endereço Return-Path). Também precisamos controlar o Return-Path para que essa ferramenta aponte o envio do email do servidor.

Como uma solução de última chance, a idéia é implantar o próprio servidor SMTP ou modificar a origem do sendmail / postfix para as nossas necessidades. É um exagero até que nenhuma outra opção esteja disponível.

Pergunta

Qual ferramenta do Linux pode retransmitir imediatamente (sem enfileirar) os e-mails para o servidor SMTP do destinatário e fornecer mensagens de devolução válidas? Ou, se houver uma solução melhor desse problema, que ferramentas eu devo examinar?

    
por BWiatrowski 18.06.2014 / 13:31

3 respostas

2

Question

What Linux tool can immediately (without queueing) relay e-mails to recipient SMTP server and provide valid bounce messages? Or, if there is better solution of this problem, what tools should I look at?

O próprio postfix tem o recurso MÚLTIPLAS INSTÂNCIAS . Ele permitirá que você defina uma instância separada do postfix que tenha sua própria fila e arquivo de configuração. Você pode usar essa instância como última cadeia de processamento do SMTP. E sim, porque tem fila separada, essa instância especial pode enviar seu email sem esperar e mexer em outra fila.

    
por 24.06.2014 / 17:54
0

Dê uma olhada no daemon de política do postfix. Isso tem cotas que funcionam da maneira que você descreve.

link

link

link

    
por 23.06.2014 / 14:13
0

Para priorizar a entrega de uma determinada mensagem de e-mail, você pode periodicamente ajustar os itens na fila adiada para ler seu cabeçalho personalizado e criar uma lista das mensagens que precisam ser entregues agora. Para cada mensagem pendente nessa lista, execute o comando abaixo.

postqueue -i queueid

Isso deve fazer com que o postfix tente entregar a correspondência com o dado da fila.

Isso pode ou não ser prático dependendo do volume de correspondência e do desempenho do sistema. No entanto, você precisaria considerar o crescimento de seu sistema e testar o throughput máximo que seu sistema precisa gerenciar.

Nota. No Centos, o conteúdo do correio adiado é armazenado no seguinte diretório.

/ var / spool / postfix / deferido

    
por 25.06.2014 / 17:10