Eu tenho um aplicativo que envia e-mail smtp por meio de um servidor Exchange local em um cliente. Todo o e-mail envia ok (ele chega ao destinatário), mas alguns e-mails são enviados várias vezes porque meu aplicativo nunca recebe o código de resposta 221 para dizer que ele funcionou bem e então tenta novamente. Poderíamos repetir as tentativas, mas geralmente isso é necessário para problemas genuínos.
Isso ocorre mais comumente em determinados endereços de e-mail de desingimento e acontecerá repetidamente nesse e-mail assim que ocorrer.
Eu capturei o fluxo TCP de um que funciona e outro que não funciona. Obviamente, os nomes mudaram para proteger os culpados.
Did work:
220 SBS4S1.example.local Microsoft ESMTP MAIL Service ready at Thu, 16 Apr 2015 11:51:16 +0100
EHLO example-PC
250-SBS4S1.example.local Hello [192.168.111.15]
250-SIZE 10485760
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-STARTTLS
250-AUTH
250-8BITMIME
250-BINARYMIME
250-CHUNKING
250-XEXCH50
250 XSHADOW
RSET
250 2.0.0 Resetting
MAIL FROM:<[email protected]>
250 2.1.0 Sender OK
RCPT TO:<[email protected]>
250 2.1.5 Recipient OK
DATA
354 Start mail input; end with <CRLF>.<CRLF>
--DATA Here, identical other than MIME/Content IDs in both emails--
.
250 2.6.0 <[email protected]> [InternalId=26602] Queued mail for delivery
QUIT
221 2.0.0 Service closing transmission channel
.
Did NOT work:
220 SBS4S1.example.local Microsoft ESMTP MAIL Service ready at Thu, 16 Apr 2015 11:43:39 +0100
EHLO example-PC
250-SBS4S1.example.local Hello [192.168.111.15]
250-SIZE 10485760
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-STARTTLS
250-AUTH
250-8BITMIME
250-BINARYMIME
250-CHUNKING
250-XEXCH50
250 XSHADOW
RSET
250 2.0.0 Resetting
MAIL FROM:<[email protected]>
250 2.1.0 Sender OK
RCPT TO:<[email protected]>
250 2.1.5 Recipient OK
DATA
354 Start mail input; end with <CRLF>.<CRLF>
--DATA Here, identical other than MIME/Content IDs in both emails--
.
QUIT
250 2.6.0 <[email protected]> [InternalId=26573] Queued mail for delivery
--This then times out but never gets the 221--
A única diferença que eu posso ver além do 221 que falta é que o 250 e o QUIT são o contrário na mensagem que "falha". Esta é uma peculiaridade conhecida do Exchange que temos que resolver, algo que poderíamos consertar ou lidar em nosso aplicativo ou algo que poderíamos pedir para ser alterado no servidor de email? Nós não queremos quebrar nada para a situação normal e comum.
Atualização: achei que não conseguiríamos acessar os registros do Exchange (os administradores nem sabiam onde estavam), mas eu tenho! Então a linha relevante é:
Tarpit para '0.00: 00: 32.619' devido a 'DelayedAck', Expirado; Tempo limite
Parece que pode ser devido a:
link
Preciso testá-lo primeiro.