ietf-smtp
[Top] [All Lists]

Re: [ietf-smtp] New Version Notification for draft-crocker-email-deliveredto-00.txt

2021-02-11 19:38:52
On Thu, Feb 11, 2021 at 7:35 PM Pete Resnick <resnick(_at_)episteme(_dot_)net> 
wrote:

Documenting an existing header field is always a good thing, but a
couple of questions:

My answer is meant to document the existing practice of this header
based on direct knowledge of how it's implemented, here and there.

Is there any functional or semantic difference between an MDA adding
Delivered-To: and an MDA adding a Received: with a 'for' clause
containing the same address?

The existing practice tends to be for mail servers to be divided,
internally, between an MTA and a MDA. The MTA that handles all mail.
The MDA handles mail addressed to local mailboxes. The MDA can be an
integral part of the mail server, or a separate MDA can be defined,
that receives a single message that gets handed off to it, from the
MTA.

The Received: header is typically added by the MTA and not an MDA. The
MTA adds the Received: header as the first order of business, before
receiving the entire message from the sender. The entire message
effectively gets appended to this first header line.

This is the typical implementation. The MTA records the obligatory
Received: header identifying itself, then the message it receives, and
it carries this message along where it goes. The MTA does not prepend
the Received: header to a verbatim copy of the message it receives,
before delivering it somewhere.

In this typical implementation, and with multiple recipients, there is
no specific recipient that can be identified in the "for" clause.

The Delivered-To: header then gets added by the MDA portion of the
mail server, for an individual message that's delivered to a single
mailbox, naming the recipient.

The MDA also uses the Delivered-To: headers as a no-brainer mail loop
detection. Before the Delivered-To: header was used, the only thing
that the MTAs did was count the number of Received: headers to detect
a (likely) mail loop. The Delivered-To: header offers a reliable
short-circuit, there's no need to bounce the same message back and
forth a few hundred times, before someone's Received: header limit is
exceeded. If the message already has an Delivered-To: header: this
indicates a mail loop, somewhere. The message can be bounced
immediately. This doesn't prevent all kinds of possible mail loops,
Received: headers continue to get counted; but this stops many of the
basic ones, that's caused by someone's broken forwarding instruction.

The Delivered-To: header is also easier to parse, instead of parsing
the entire Received: header.

difference between an MTA and an MDA? It seems like Received: could have
been used, and it can carry more info. (And perhaps the right question
to ask before all that is: Why did folks start adding a Delivered-To:
instead of just adding a Received: field with a 'for' clause?)

Much easier mail loop detection.

Also, does adding the Return-Path: happen before or after adding the
Delivered-To:? The spec seems to indicate before, but it doesn't mention
Return-Path: at all.

It's been my experience that their relative order is unspecified,
consistent with all other headers (except for the defined order of the
Received: headers).

_______________________________________________
ietf-smtp mailing list
ietf-smtp(_at_)ietf(_dot_)org
https://www.ietf.org/mailman/listinfo/ietf-smtp

<Prev in Thread] Current Thread [Next in Thread>