At 16:17 15/09/2005, Arnt Gulbrandsen wrote:
Paul,
while taking a break just now I had a heretical thought. Something that's
legal by the RFC, but possibly a little hacky and just a tad revolting:
C: DATA
S: 354 Go on, send me the mail
C: ...
C: .
S: 250-Virus filtering may take time, please be patient
S: 250-Virus filtering may take time, please be patient
At this point, you've started sending 250, but you haven't sent it. You
have two legal options: Finish sending 250 and not finish sending it.
S: 250 OK. I accept responsibility for the message
The other option is to close the connection abruptly, and keep a note of
the message so you can reject it quickly next time.
That's close to my other idea - I was thinking of sending a 450- 450- etc
followed by 450 , and then waiting for the retry, having already decided
what to do with the message when it comes through again.
However, your idea is "sort of" better, in that it doesn't require a resend
for accepted messages. I'm not sure I like the idea of deliberately
dropping a connection though :)
(What we actually do at the moment, is just do all the processing before
the 250 or 550 response without any continuation lines, but make a note of
the message details. Then, if the message is resent, we discard the second
copy immediately - so we don't get duplicates. It still has the problem of
duplicated sends which always strike me as less efficient than just having
an idle connection. This is why I was wanting to find a better way of doing
it, which wouldn't need any unnecessary resends).
Paul VPOP3 - Internet Email Server/Gateway
support(_at_)pscs(_dot_)co(_dot_)uk http://www.pscs.co.uk/