Robert A. Rosenberg wrote:
One way to eliminate the duplicates if the SMTP server has accepted
and sent the message but the MUA did not hang around to get the
acceptance ACK (or did not send the QUIT) is to save the Message-ID of
messages that the MUA did this for (I assume the retransmission will
have the same MID. If/when it attempts reinjection, compare the
supplied MID against the saved list and reject the attempt with a 5xx
status code (and text saying "You submitted this already and I
accepted and forwarded it"). You can prune the entry after a
designated wait time or when the message is resubmitted (the latter
possibly before the wait time expiration).
Our server does something like this - it actually stores a set of data
of message-id, date, sender & recipient(s) to (a) handle the situation
where the same message comes in twice, once for one recipient and once
for another, both with the same message-id, and (b) to try to handle the
rare (but not impossible) possibility of a duplicate message-id. It
doesn't reject the message if it's seen it before, but it silently
accepts it then discards it. (Rejecting the message would cause
confusion for the sender who might then think the message hadn't got
through).
I must say that, personally, I've never come across a situation where a
10 minute timeout has caused a problem, but far too many will timeout at
the end of DATA even at 1 minute, and 5 minutes is not unusual.
Personally, I'd prefer either a 'keep-alive' or an analogue to the NNTP
'IHAVE', so the sending MTA can say to the receiving MTA 'I have message
ID xxxxx' and the receiving MTA can say 'I've already seen that, don't
bother sending it again'. The latter would be more complex, but would
reduce resource consumption on the sending MTA.
--
Paul Smith
VPOP3 - POP3/SMTP/IMAP4/Webmail Email server for Windows