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