ietf-smtp
[Top] [All Lists]

Re: SendMail follows a NO RETRY 5yz logic as defined by specs.

2008-08-11 23:19:48

On Mon, 11 Aug 2008, Hector Santos wrote:
....
Lets checks out existing software to see how their clients and server 
behave in the area of dealing with retries:

In SendMail (8.14.1), first without PIPELINING enabled.
...
The key point, is that here is SendMail, one of he more popular SMTP 
systems in the world actually following the specifications for retries.  
It marks the address BAD for a DATA <EOT> 5yz response.

You appear to be claiming that the sendmail MTA, when acting as an SMTP 
client, will permanently fail an address that was temp failed (4xy) at the 
RCPT time if other RCPT commands succeeded and the DATA command failed 
after the final dot with a 5xy response.  You base this on a brief 
examination of the source.

If that is *NOT* what you are claiming, please state your claim more 
clearly.

If that *IS* what you are claiming, it is quite clearly WRONG.


My proof is simple: rather than trying to deduce what code would do by 
reading it, I actually ran it!  I set up an SMTP test server that for the 
addresses good(_at_)example(_dot_)com, temp(_at_)example(_dot_)com, and 
perm(_at_)example(_dot_)com would 
return, respectively, 250, 451, and 550, and that would respond to the 
final dot after DATA with 550.  After directing sendmail to send messages 
for example.com to that test server, I sent a message to those three 
addresses.  Here's the transcript of the SMTP conversation:

< 220 localhost hybrid sink ready
EHLO vanye.mho.net
< 250-pleased to meet you; your protocol today will be SMTP (Exchange).
< 250-EXPN
< 250-VERB
< 250-8BITMIME
< 250-SIZE
< 250-DSN
< 250-ONEX
< 250-ETRN
< 250-XUSR
< 250 HELP*
MAIL From:<guenther(_at_)mho(_dot_)com> SIZE=35
< 250 2.1.0 Originator OK
RCPT To:<temp(_at_)example(_dot_)com>
< 451
RCPT To:<good(_at_)example(_dot_)com>
< 250 2.1.5 Recipient OK
RCPT To:<perm(_at_)example(_dot_)com>
< 550
DATA
< 354 Start message; end with <CRLF>.<CRLF>
< 550
Received: (from root(_at_)localhost)
        by vanye.mho.net (8.14.3/8.14.3) id m7C5PwKS013186;
        Mon, 11 Aug 2008 23:25:58 -0600 (MDT)
Date: Mon, 11 Aug 2008 23:25:58 -0600 (MDT)
From: Philip Guenther <guenther(_at_)mho(_dot_)com>
Message-Id: <200808120525(_dot_)m7C5PwKS013186(_at_)vanye(_dot_)mho(_dot_)net>
To: people:;
Subject: test

dskjfh
.
QUIT
< 221 2.0.0 Be seeing you.


Here's the message/delivery-status part of the DSN that I then received:

------
Reporting-MTA: dns; vanye.mho.net
Arrival-Date: Mon, 11 Aug 2008 23:25:58 -0600 (MDT)

Final-Recipient: RFC822; perm(_at_)example(_dot_)com
Action: failed
Status: 5.1.1
Remote-MTA: DNS; localhost.mho.net
Diagnostic-Code: SMTP; 550
Last-Attempt-Date: Mon, 11 Aug 2008 23:26:10 -0600 (MDT)

Final-Recipient: RFC822; good(_at_)example(_dot_)com
Action: failed
Status: 5.2.0
Remote-MTA: DNS; localhost.mho.net
Diagnostic-Code: SMTP; 550
Last-Attempt-Date: Mon, 11 Aug 2008 23:26:11 -0600 (MDT)
------

...and here's the mailq output showing that delivery to 
temp(_at_)example(_dot_)com 
will be retried:

                /var/spool/mqueue (1 request)
-----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient-----------
m7C5PwKS013186        7 Mon Aug 11 23:25 guenther
                 (Service unavailable)
                                         temp(_at_)example(_dot_)com
                Total requests: 1


You'll note the test server did not advertise the PIPELINING extension in 
that run.  So I turned it on to see if it had any effect.  The only change 
was in the ordering of the SMTP conversation; there was no effect on what 
was retried and what was reported as permanently failed in the DSN.


Philip Guenther
guenther(_at_)sendmail(_dot_)com