Victor Duchovni: > > Wietse, is this sufficient? I know it is not very detailed on the > "impact analysis". Since pipelined "[message]<CRLF>.<CRLF>QUIT<CRLF>" > works correctly, while in theory there could be other pipelining issues, > none other that SAV come to mind.
Thanks. I'll put this up on a page so people can refer to this when the problem happens. The URL would be: http://www.postfix.org/workarounds.html It will take 24 hours to propagate once I have set this up. Wietse > The SMTP service at mail.global.frontbridge.com does not fully conform > to RFC 2920 which defines the ESMTP PIPELINING extension. Specifically, > in http://tools.ietf.org/html/rfc2920#section-3.1 we see that "RSET", > "MAIL FROM", and "RCPT TO" are some of the commands that can appear > anywhere in a pipelined group, while "EHLO", "DATA" and "QUIT" are some > of the commands that can only appear as the last command in a group. > > Section 3.2 http://tools.ietf.org/html/rfc2920#section-3.2 specifies > required server behaviour: > > (1) MUST respond to commands in the order they are received from > the client. > > ... > > (9) MUST NOT flush or otherwise lose the contents of the TCP input > buffer under any circumstances whatsoever. > > A correct implementation of RFC 2920 is recorded below from an intranet > MSFT Exchange 2007 server. > > S> 220 exchange.example.com Microsoft ESMTP MAIL Service ready at Sun, 28 > Nov 2010 02:41:13 -0500 > > C> EHLO amnesiac.example.com > > S> 250-exchange.example.com Hello [192.0.2.1] > S> 250-SIZE 29999104 > S> 250-PIPELINING > S> 250-DSN > S> 250-ENHANCEDSTATUSCODES > S> 250-STARTTLS > S> 250-AUTH > S> 250-8BITMIME > S> 250-BINARYMIME > S> 250-CHUNKING > S> 250 XEXCH50 > > C> MAIL FROM:<sen...@example.com> > C> RCPT TO:<recipi...@example.com> > C> RSET > C> QUIT > > S> 250 2.1.0 Sender OK > S> 250 2.1.5 Recipient OK > S> 250 2.0.0 Resetting > S> 221 2.0.0 Service closing transmission channel > > The four pipelined client commands "MAIL FROM", "RCPT TO", "RSET" and > "QUIT" are all processed by the Exchange server which correctly returns > four responses. > > The same test against the public MX host for Microsoft's Exchange > engineering group yields similar results: > > S> 220 mail7.exchange.microsoft.com Microsoft ESMTP MAIL Service ready at > Sat, 27 Nov 2010 23:43:19 -0800 > > C> EHLO amnesiac.example.com > > S> 250-mail7.exchange.microsoft.com Hello [192.0.2.1] > S> 250-SIZE 104857600 > S> 250-PIPELINING > S> 250-DSN > S> 250-ENHANCEDSTATUSCODES > S> 250-STARTTLS > S> 250-X-ANONYMOUSTLS > S> 250-AUTH > S> 250-X-EXPS NTLM > S> 250-8BITMIME > S> 250-BINARYMIME > S> 250-CHUNKING > S> 250-XEXCH50 > S> 250 XSHADOW > > C> MAIL FROM:<sen...@example.com> > C> RCPT TO:<recipi...@example.com> > C> RSET > C> QUIT > > S> 250 2.1.0 Sender OK > S> 250 2.1.5 Recipient OK > S> 250 2.0.0 Resetting > S> 221 2.0.0 Service closing transmission channel > > Finally, testing mail.global.frontbridge.com we get non-conformant results. > > S> 220 DB3EHSMHS006.bigfish.com Microsoft ESMTP MAIL Service ready at > Sun, 28 Nov 2010 07:47:08 +0000 > > C> EHLO amnesiac.example.com > > S> 250-DB3EHSMHS006.bigfish.com Hello [192.0.2.1] > S> 250-SIZE 157286400 > S> 250-PIPELINING > S> 250-ENHANCEDSTATUSCODES > S> 250-STARTTLS > S> 250-AUTH > S> 250-8BITMIME > S> 250-BINARYMIME > S> 250 CHUNKING > > C> MAIL FROM:<sen...@example.com> > C> RCPT TO:<recipi...@example.com> > C> RSET > C> QUIT > > S> 250 2.1.0 Sender OK > S> 221 2.0.0 Service closing transmission channel > > <Client sees premature TCP close while expecting two more responses> > > In this case the client's "RCPT TO" and "RSET" commands are "lost", > and the "QUIT" response arrives out-of-order. One may speculate that the > issue may be not in Microsoft Exchange, but rather in proxy software in > front of the Exchange server. > > > Correct response sequencing is recovered by breaking the group between > "RSET" and "QUIT": > > S> 220 VA3EHSMHS032.bigfish.com Microsoft ESMTP MAIL Service ready at > Sun, 28 Nov 2010 07:48:50 +0000 > > C> EHLO amnesiac.example.com > > S> 250-VA3EHSMHS032.bigfish.com Hello [192.0.2.1] > S> 250-SIZE 157286400 > S> 250-PIPELINING > S> 250-ENHANCEDSTATUSCODES > S> 250-STARTTLS > S> 250-AUTH > S> 250-8BITMIME > S> 250-BINARYMIME > S> 250 CHUNKING > > C> MAIL FROM:<sen...@example.com> > C> RCPT TO:<recipi...@example.com> > C> RSET > > S> 250 2.1.0 Sender OK > S> 250 2.1.5 Recipient OK > S> 250 2.0.0 Resetting > > C> QUIT > > S> 221 2.0.0 Service closing transmission channel > > Significantly, the FrontBridge SMTP servers correctly handle pipelining > of DOT + QUIT at the end of a delivery transaction, perhaps because this > "group" has only two elements, or is otherwise treated specially. > > S> 220 DB3EHSMHS003.bigfish.com Microsoft ESMTP MAIL Service ready at > Sun, 28 Nov 2010 07:27:55 +0000 > > C> EHLO amnesiac.example.com > > S> 250-DB3EHSMHS003.bigfish.com Hello [192.0.2.1] > S> 250-SIZE 157286400 > S> 250-PIPELINING > S> 250-ENHANCEDSTATUSCODES > S> 250-STARTTLS > S> 250-AUTH > S> 250-8BITMIME > S> 250-BINARYMIME > S> 250 CHUNKING > > C> MAIL FROM:<sen...@example.com> > C> RCPT TO:<recipi...@example.com> > C> DATA > > S> 250 2.1.0 Sender OK > S> 250 2.1.5 Recipient OK > S> 354 Start mail input; end with <CRLF>.<CRLF> > > C> [message-content]<CRLF>.<CRLF> > C> QUIT > > S> 250 2.6.0 <20101128070828.ab036504...@amnesiac.example.com> > [InternalId=11073071] Queued mail for delivery > S> 221 2.0.0 Service closing transmission channel > > -- > Viktor. > > P.S. The new "[InternalId=...]" in the "DOT" response is encouraging, > have not seen these from MSFT Exchange before, this should make tracking > down problems easier when a single message is carried in multiple > envelopes. > >