E-mails de fila no linux

3

Eu tenho um servidor de retransmissão de email distante e lento e um aplicativo da Web que estou usando é bloqueado ao enviar emails para esse servidor de email distante, até que o email seja enviado. Depois que o e-mail é enviado, a página volta e o aplicativo é reajustado novamente.

Por isso, estou tentando configurar uma fila de mensagens diferente localmente no servidor de aplicativos (Linux) para que o aplicativo use isso em vez do servidor de email distante. Meu raciocínio é que os e-mails seriam enfileirados localmente até serem processados pelo servidor de e-mail distante, mas pelo menos o aplicativo não bloqueia.

Instalei postfix e configurei o relayhost para o servidor de email distante, mas o desempenho não melhorou. O que parece acontecer é que o postfix apenas encaminha minhas instruções SMTP em tempo real e realmente não as coloca em fila?

O que posso fazer?

    
por md1337 25.06.2011 / 00:35

3 respostas

5

O problema não está no Postfix. Antes de instalar o Postfix, seu aplicativo enviava diretamente seu e-mail para um servidor de Envio de SMTP distante, através da Internet. O passo que você perdeu é reconfigurar seu aplicativo . Ainda está saindo para o servidor distante. Você precisa informar sua inscrição, talvez indiretamente, para enviar mensagens localmente.

Se for uma aplicação PHP, por exemplo, o comportamento da função mail() é controlado pelo opção de configuração sendmail_path no Unices e no Linux. Provavelmente está apontando atualmente para um programa shim que apenas conecta uma conexão de Envio SMTP e bombeia sua entrada padrão através dela. Você precisa apontar isso para o programa de envio do Postfix, sendmail , em vez disso.

Provavelmente, isso não está ocorrendo em /usr/bin/sendmail porque seu programa shim está lá e provavelmente está em /usr/bin/sendmail.postfix ou em algum lugar semelhante. De fato, se você tiver o sistema "alternativas" /usr/bin/sendmail será um link simbólico para /etc/alternatives/mta-sendmail , ele próprio um link simbólico, e você pode ter que redirecionar o segundo.

Por qualquer meio, que envolva detalhes de sua distribuição, aplicativo e configuração que não podemos divinar telepaticamente, você precisa fazer com que seu aplicativo invoque o programa correto. Simplesmente instalar o Postfix não fez essa parte.

Observe que o Postfix está no mesmo campo que o Zmailer, o MMDF e o qmail. O que BillThor escreve em outra resposta aqui é um completo arenque vermelho baseado no Sendmail Think. Sendmail e exim são programas monolíticos que precisam distinguir entre os modos "rápido e não enfileirado" e "lento e enfileirado" devido à maneira como são arquitetados. O programa de envio se transforma em um agente de transporte e não sai até que ele tenha canonizado, roteado e transmitido (ou tentado) a mensagem, o que será um longo tempo no seu caso; ou o programa de envio sempre envia o e-mail para uma fila, onde ele aguarda até que um processo do executador da fila seja ativado, atrasando o intervalo de sondagem do executor da fila (geralmente na ordem de minutos ou horas).

O postfix e o qmail seguem os passos do MMDF, com vários pequenos programas separados realizando um trabalho cada, de acordo com a filosofia Unix. O email é sempre depositado em uma fila. Mas o programa de injeção de fila ( postdrop no caso do Postfix) aciona um tipo de semáforo ( É um canal nomeado no qmail . ) para ativar o daemon de processamento da fila (um daemon de pré-processamento, pickup , no caso do Postfix) imediatamente . Para emprestar e modificar um pouco uma citação de Dan Bernstein :

Other MTAs offer a spectrum of delivery modes, from fast+unsafe to slow+queued. The queue daemons in qmail and Postfix are instantly triggered by new items in the queue, so the system has just one delivery mode: fast+queued.

Isso é exatamente o que você quer. Você deseja que o programa sendmail termine rapidamente, permitindo que seu aplicativo (que aguarda que ele termine) continue e que o processamento da fila seja iniciado imediatamente, mas em paralelo. Postfix, qmail, nullmailer , e assim por diante, darão tudo isso a você. Você apenas precisa corrigir o seu aplicativo para invocar o agente de envio correto.

    
por 25.06.2011 / 11:35
2

Você deseja configurar o postfix para adiar a entrega de mensagens:

defer_transports = smtp
disable_dns_lookups = yes

no seu main.cf.

Você pode liberar a fila com o sendmail -q quando desejar entregar.

Dê uma olhada na configuração MX do Postfix Backup

Espero que isso ajude.

    
por 25.06.2011 / 02:34
1

Os servidores de email geralmente preferem entregar mensagens imediatamente, em vez de colocá-las em fila para entrega posterior. Tem sido minha experiência que muitos usuários de e-mail esperam este modo de entrega instantânea.

Procurei instruções para executar o Postfix no modo somente de fila, mas não encontrei nenhum. O Exim, que é empacotado para muitas distribuições, pode ser configurado para ser executado no modo somente de fila. Novas mensagens serão enfileiradas e entregues posteriormente por um processo do gerenciador de filas. Isso é provavelmente o que você quer. O Exim é normalmente configurado para fazer verificações mínimas nas mensagens recebidas de fontes locais.

Como alternativa, você pode analisar a geração de um segmento ou processo para enviar o e-mail.

    
por 25.06.2011 / 01:08