Sendmail atrasa alguns endereços de e-mail

1

Em nosso servidor da Web, o comando PHP mail() fica pendurado em alguns endereços de e-mail, mas é bom para a maioria. Ele é interrompido por mais de 2 minutos, período em que o script PHP perdeu a conexão com o banco de dados, então retorna um erro para o navegador.

Nós usamos sendmail e eu posso ver um atraso de 2:36 no log de e-mail ( / var / log / maillog ) para o endereço de e-mail que causa o problema :

Dec  9 11:24:00 liveserver sendmail[12666]: nB9BLOHa012666: to=***blanked_out***, delay=00:02:36, mailer=esmtp, pri=31326, dsn=4.4.3, stat=queued

É fácil reproduzir o problema. Eu posso colocar o email que quero testar no seguinte comando:

echo "Test message from sendmail." | sendmail [email protected] [email protected]

A maioria dos endereços de e-mail faz com que o comando retorne dentro de 1s (incluindo endereços de e-mail inválidos). Mas o endereço de e-mail problemático fica por 2:36.

  • Por que o sendmail não enfileira a mensagem e retorna imediatamente para que o PHP continue em execução?
  • Alguém tem alguma dica para depurar o problema?
  • Alguém tem alguma dica sobre como investigar o endereço de e-mail problemático para ver por que está causando um atraso?

Observação: Atualmente, temos 550 mensagens em fila - mas esse número não está acima do normal ( find /var/spool/mqueue -type f -name qf\* -print|wc -l|tr -d ' ' ).

    
por Tom 09.12.2009 / 13:13

3 respostas

2

Normalmente, os atrasos por email são problemas de DNS.

Tente executar:

host -t mx problemdomain.com

Se isso não parece ser o problema, use sendmail -bi -v para obter mais resultados de depuração.

    
por 09.12.2009 / 13:46
2

Talvez seu dns emite, tente fazer um dig do problemmail.com.

Você também pode tentar strace e ver o que o processo faz:

anexar ao processo:
    strace -ff -s 512 -v -p pid

iniciar o processo com strace:
    strace -ff -s 512 -v sendmail -ffromtest ...........

adicione -o ~ / sendmail.strace para a saída em um arquivo.

-ff faz seguir os garfos

    
por 09.12.2009 / 13:44
1

Para responder minhas próprias perguntas (no caso de ser útil para outras pessoas):

Why doesn't sendmail queue the message and return immediately so PHP can continue running?

Deveria fazer. Se isso não acontecer, significa que a configuração do servidor DNS está quebrada. Normalmente, as pesquisas de DNS são rápidas - Uma consulta em um domínio / domínio inexistente deve receber uma resposta NXDOMAIN dentro de milissegundos. Ele não deve esperar tanto tempo - esse problema provavelmente está causando outros problemas com muitos programas, por exemplo, sshd e NFS?

Does anyone have any tips for debugging the issue?

Tente executar:

host -t mx problemdomain.com

Em seguida, execute-o novamente usando o googleDNS (endereço IP de 8.8.8.8) em vez do serviço DNS atual:

host -t mx problemdomain.com 8.8.8.8

Se houver uma diferença, significa que a configuração atual do servidor DNS está quebrada. Verifique os servidores de nomes em /etc/resolv.conf e, talvez, crie um ticket de problema com a empresa de hospedagem ou quem fornece os servidores de nomes que você está usando?

Como solução temporária, tente adicionar um tempo limite de DNS em /etc/resolv.conf :

timeout: n
    sets the amount of time (in seconds) the resolver will wait for a response from a remote name server before retrying the query via a different name server.

Does anyone have any tips on how to probe the problematic email address to see why it is causing a delay?

Teste dig , um utilitário de pesquisa de DNS e monitore o código de status. por exemplo. NOERROR para sucesso, NXDOMAIN para não encontrado, etc:

dig problemdomain.com

Teste o nslookup , um programa para consultar servidores de nomes da Internet:

nslookup problemdomain.com

Tente cronometrar o comando sendmail e use -bi -v para obter mais informações:

time echo "This is a test message" | /usr/lib/sendmail -bi -v [email protected] [email protected]
    
por 10.12.2009 / 09:47