I wrote:
> I have some ideas about a few sentences which could be added to your
> draft, which would eliminate most timing issues between any two
> compliant implementations.  But I'm about to be almost late for a
> meeting, so I'll write that part tomorrow or during the weekend.

Here they are:

 * If the client receives an incomplete 558 reply, the client should
   process normally any of this reply's subreplies which were received
   in their entirety, and should process any incomplete or unreceived
   subreplies as if they had been 451 subreplies.

(Rationale:  If clients ignored all the subreplies in an incomplete
558 reply, there would be no forward progress if the connection gets
broken while the server is in the middle of processing a message with
many recipients.  Conversely, if clients were expected to process
incomplete subreplies, users could be exposed to SMTP reply text
which has been truncated.  Truncation can change the meaning of text.)

 * The server should attempt to minimize the time between committing
   a delivery to safe storage, and sending a subreply to acknowledge
   that delivery.  The server should make an effort to avoid committing
   a delivery if it can determine that the subreply cannot be sent
   to the client.

(Rationale:  This is meant to avoid the RFC 1047 race condition.
The method suggested in RFC 1047 (minimize the time between the final
"." and the reply, by doing accept-then-bounce) is no longer feasible.)

 * While receiving a 558 reply, the client must implement a
   timeout of at least 10 minutes per subreply.  It MUST use per-
   subreply timeouts rather than trying to time the entire 558 reply.
   This means that the overall timeout is approximately proportional
   to the number of recipients.

(Rationale:  I chose 10 minutes because that's the suggested minimum
timeout for processing a message body, in the middle of section 4.5.3.2
of RFC 2821.  The second and third sentences above are adapted from
the first paragraph of that same section of the RFC.)

(Discussion:  In today's environment, with real messages outnumbered by
spam, when you ask a server to accept a message (especially one with
many recipients) you are asking that server to perform substantial
computation on your behalf.  You should at least be willing to allow
sufficient time for the computation to be performed!)

 * While sending a 558 reply, the server should take no more than
   about 5 minutes to send each subreply.  If individual users
   administer their own filtering software, it would be advisable to
   use a timeout mechanism to force a decision after 5 minutes.

(Rationale: if a user's filter always takes too long, and triggers
the client's 10 minute timeout, other users might not ever be able
to receive the message.)

(Discussion:  Of course the server is free to set this internal
timeout faster than 5 minutes, and in practice most subreplies
will be fast anyway.  But the speed is controlled by the server;
the client must not timeout any subreply faster than 10 minutes.
Note: The appropriate server timeout could be calculated by starting
with 10 minutes, subtracting the maximum expected network delay,
and subtracting a safety factor.  I didn't do that; I just guessed 5
minutes because it's half of 10 minutes.  It's probably good enough.)









-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
courier-users mailing list
courier-users@lists.sourceforge.net
Unsubscribe: https://lists.sourceforge.net/lists/listinfo/courier-users

Reply via email to