Re: [ietf-smtp] parsing SMTP replies (was: Proposed ESMTP keyword RCPTLIMIT}

Alessandro Vesely <> Thu, 18 March 2021 10:37 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 44D5D3A2786 for <>; Thu, 18 Mar 2021 03:37:35 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -2.821
X-Spam-Status: No, score=-2.821 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, NICE_REPLY_A=-0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: (amavisd-new); dkim=pass (1152-bit key)
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id TTy6_h6WD4w9 for <>; Thu, 18 Mar 2021 03:37:33 -0700 (PDT)
Received: from ( []) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 371673A2785 for <>; Thu, 18 Mar 2021 03:37:32 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=delta; t=1616063842; bh=b4Yy5Ppx9xUCsKJfS/48b6c+J/wZtf+udmIaSP4QM7A=; l=2238; h=To:References:From:Date:In-Reply-To; b=B91DACHBQNLypUHMxLHX8nqrsRknjs2cGjvLnlsKG5k9WFdkNzzNnfFTaC2e3U9+c 9NfzHh01jdStV0Vz8JXh2ojSXrKLyeQTjY+g+2Ra04c0zXOJA4CqScjP4RiooLFzjM 3Jer88jU8mTjqLDv8yC29qTk6ue3+VzmQL4/ZIFKUstjTGL5uL7NXl1ZPdoRw
Authentication-Results:; auth=pass (details omitted)
Original-From: Alessandro Vesely <>
Received: from [] (pcale.tana []) (AUTH: CRAM-MD5 uXDGrn@SYT0/k, TLS: TLS1.3, 128bits, ECDHE_RSA_AES_128_GCM_SHA256) by with ESMTPSA id 00000000005DC0B0.0000000060532D62.000039CD; Thu, 18 Mar 2021 11:37:22 +0100
To: Ned Freed <>,
References: <> <20210312203224.F3739701E4C5@ary.qy> <> <> <> <CF0247A810AF9482CBB155E8@PSB> <> <> <> <>
From: Alessandro Vesely <>
Message-ID: <>
Date: Thu, 18 Mar 2021 11:37:21 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.0
MIME-Version: 1.0
In-Reply-To: <>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 8bit
Archived-At: <>
Subject: Re: [ietf-smtp] parsing SMTP replies (was: Proposed ESMTP keyword RCPTLIMIT}
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "Discussion of issues related to Simple Mail Transfer Protocol \(SMTP\) \[RFC 821, RFC 2821, RFC 5321\]" <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Thu, 18 Mar 2021 10:37:35 -0000

On Wed 17/Mar/2021 18:44:04 +0100 Ned Freed wrote:
>> +-------------
>> +
>> +
>> +Value syntax:  %x31-39 0*5DIGIT ; 0 not allowed, 6 digit maximum
>> +
>> +Description: GREYLISTING specifies the minimum number of seconds
>> +that a client should wait before retrying to submit the same message.
>> +The presence of this limit implies that the client MAY receive a
>> +transient 4xx response.  See {{GREYLISTING}}
> [...]
> That said, I don't see why this limit necessarily has anything to do  with
> greylisting. It's about how to long to wait before retying after a transient
> failure, irrespective of why the delay occurred. If could be greylisting, it
> could be exceeding a rate or connection limit, it could be one of the sources
> for validating recipients is down, it could be the spam filtering system is
> down, etc. RETRYDELAY would be a much better name for it.

Good point.  By observing RCPTLIMIT, a client can avoid re-queuing delays.  It 
stops just before reaching the limit and then starts a new transaction right 
away.  However, this won't work if 452 was issued to split recipients according 
to a different criterion than the local max number.

> The question then becomes is such an announcement - one that applies to all
> transient failures, useful.

Applying RETRYDELAY to all transient failures doesn't seem to me to be the 
right thing to do.  However, distinguishing among transient failures conflicts 
with the dog rule.

> My sense is that the utility is marginal given the lengthy list of possible
> causes and the fact that the best retry period for different causes could be
> very different, which I note that the approach taken in the original
> proposal allows.

In this moment I'm unable to think of varying delay lengths.  Some 
considerations, for example how often a server updates some DCC database or how 
long does it take to reboot, may suggest a retry interval common to all 
transient failures that require a delay.  That is, most 4xx, except splitting 
recipients, where immediate retry is better.  So, two categories may suffice.

How about NORETRYDELAY=452?  (Just kidding...)