RFC 2369

The Use of URLs as Meta-Syntax for Core Mail List Commands and their Transport through Message Header Fields

๐Ÿ“… published July 1998, from ietf

RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands and their Transport through Message Header Fields ๐ŸŽ€

  • Group: Network Working Group
  • Request for Comments: 2369
  • Authors: G. Neufeld (Nisto) and J. Baer (SkyWeyr Technologies) ๐Ÿ‘ฏ
  • Category: Standards Track
  • Date: July 1998
  • Obsoletes/Updates: The title block doesn't list anything this one obsoletes or updates ๐Ÿซถ

Status of This Memo โœจ

This doc specifies an Internet standards track protocol for the Internet community, and it's basically asking for discussion and suggestions for improvements ๐Ÿ’ฌ. For the standardization state and status of this protocol, check the current edition of the "Internet Official Protocol Standards" (STD 1) ๐Ÿ“š. Distribution of this memo is unlimited ๐ŸŒˆ.

Copyright (C) The Internet Society (1998). All Rights Reserved. ๐Ÿ”’

Abstract ๐Ÿฆ‹

Okay so this whole doc is about a set of structured header fields that get tucked into emails sent by mailing lists ๐Ÿ’Œ. Each field usually holds a URL (most often a mailto [RFC2368] one) that either points to the relevant info or runs the command for you right away. The three core fields here are List-Help, List-Subscribe, and List-Unsubscribe ๐Ÿ’–.

There are three more fields described here: List-Post, List-Owner and List-Archive. They aren't as widely used, but enough lists need them that they're worth making official ๐Ÿงš.

When list servers include these headers, mail clients can build automated tools so users can do list stuff from a menu item, a push button, or some other UI element ๐ŸŽ€. The whole point is to make the super cryptic, super varied list manager commands feel simple, with one common interface ๐Ÿ‘‘.

Quick rule check ๐Ÿซถ: the key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 ๐Ÿ’….


1. Introduction ๐ŸŒธ

This is a proposal for extra header fields that get added to emails sent by mailing lists ๐Ÿ’Œ. Each new field is usually a URL (most often mailto [RFC2368]) that either locates the relevant info or performs the command right there. MTAs generating the header fields SHOULD usually include a mailto based command, alongside any other protocols they use, so that people without access to non-mail-based protocols can still use the list ๐Ÿซถ.

Implementing these fields is optional ๐Ÿ“. There's still a lot of functionality and convenience to be gained by including them. Lots of list managers, especially as the proposal first gets accepted, MAY choose to implement only one or two of the fields ๐Ÿฆ‹. The List-Help field is the MVP ๐Ÿ‘‘ because it gives users an access point to detailed support info and covers almost all existing list manager command sets. List-Subscribe and List-Unsubscribe are super useful too, but they can't describe some list manager syntaxes yet, specifically the ones that need variable substitution. See appendix A.5 for the explanation ๐Ÿ™ˆ.

Mail clients can use the command syntax descriptions in these fields to give users simplified, consistent access to list functions, like menu items, push buttons, or other UI elements โœจ. Same goal as before: make the cryptic, varied list manager commands feel easy ๐Ÿ’–.

The authors were careful about two things at once: not creating too many fields, and not overloading individual fields while keeping the syntax clear and simple ๐Ÿงš.

Using these fields doesn't remove the requirement to support the -Request command address for mailing lists [RFC2142] ๐Ÿ“ฎ.


2. The Command Syntax ๐Ÿ’œ

The list header fields follow the encoding and character restrictions for mail headers described in [RFC822] ๐Ÿ“ฌ. On top of that, the URL content is restricted to the set of URL safe characters [RFC1738] ๐Ÿ”.

Most of the list header content is URLs enclosed in angle brackets (< and >), and any internal whitespace is ignored ๐ŸŒˆ. MTAs MUST NOT insert whitespace within the brackets. Client applications should still treat any whitespace a poorly behaved MTA might insert as characters to ignore ๐Ÿ’€.

A list of multiple, alternate URLs MAY be given as a comma-separated list of angle-bracket enclosed URLs โœจ. The URLs are in order of preference, left to right. The client should use the leftmost protocol it supports, or one it knows how to access through a separate application ๐Ÿฆ‹. That way, protocols like http can be listed while the basic mailto option still covers clients without non-mail access ๐Ÿ’Œ. The client should only use one of the available URLs for a command, and only fall back to another if the first one it tried failed ๐Ÿซถ.

Using URLs means the syntax works with existing URL-supporting applications. As the URL standard gets extended, the list header fields get those benefits too ๐ŸŒŸ. URLs also give access to multiple transport protocols (such as ftp and http), though the "mailto" protocol [RFC2368] is expected to be the focus of most use ๐Ÿ’–. Non-mailto protocols should be considered with users who don't have access to that mechanism in mind, like people who only have email and no web access ๐Ÿ™ˆ.

Command syntaxes that need variable fields set by the client, like putting the user's email address inside a command, aren't supported by this implementation ๐Ÿ˜ญ.

Systems using those syntaxes SHOULD still take advantage of the List-Help field to give users detailed instructions as needed. Even better, they can provide access to some kind of structured command interface, like an HTML-based form ๐Ÿ’….

Supporting variable fields inside the command syntax was judged too difficult for this protocol, and it would have hurt the chances of software authors actually implementing it ๐Ÿฅฒ.

To allow for future extension, client applications MUST follow these guidelines for handling the contents of the header fields described in this document ๐ŸŽ€:

  1. Except where noted for specific fields, if the content of the field (after any leading whitespace, including comments) begins with any character other than the opening angle bracket <, the field SHOULD be ignored.
  2. Any characters following an angle-bracket enclosed URL SHOULD be ignored, unless a comma is the first non-whitespace/comment character after the closing angle bracket.
  3. If a sub-item (comma-separated item) within the field is not an angle-bracket enclosed URL, the remainder of the field (the current sub-item and all subsequent ones) SHOULD be ignored.

Those are the rules for section 2, bestie ๐Ÿ’š๐Ÿงš

4. Supporting Nested Lists ๐Ÿช†

okay so picture a mailing list family tree ๐ŸŒณ. A sublist is basically a little kid list hanging off a parent list, and it's allowed to tweak some of the List- header fields while leaving the rest exactly how the parent set them ๐Ÿ’…

Sublists SHOULD remove the parent list's List-Help, List-Subscribe, List-Unsubscribe and List-Owner fields, and SHOULD insert their own versions of those fields. ๐Ÿซถ

If the sublist provides its own archive, it SHOULD replace the List-Archive with its own. Otherwise, it MUST leave the List-Archive field untouched. ๐Ÿ“š

Depending on how postings to the list are handled, the sublist MAY replace the List-Post field. โœจ Whether replacing List-Post makes sense is left to the individual list managers to decide, so it's their call ๐Ÿ‘‘. If the intention is that postings should be distributed to all members of the primary list, List-Post should not be changed by a sublist in such a way that postings will be distributed only to members of the sublist. ๐Ÿ™…โ€โ™€๏ธ


5. Security Considerations ๐Ÿ”

okay this part is important bestie, so read it carefully ๐Ÿฅบ. There are very few new security concerns generated with this proposal. Message headers are an existing standard that was designed to easily accommodate new types ๐Ÿงฉ. There may be concern with multiple fields being inserted or headers being forged, but these are problems inherent in Internet email, not specific to the protocol described in this document. Further, the implications are relatively harmless ๐Ÿ’–.

Mail list processors should not allow any user-originated list header fields to pass through to their lists, lest they confuse the user and have the potential to create security problems ๐Ÿšซ.

On the client side, there may be some concern with posts or commands being sent in error. It is required that the user have a chance to confirm any action before it is executed ๐Ÿ›‘. In the case of mailto, it may be appropriate to create the correctly formatted message without sending it. That way the user can see exactly what is happening and get the opportunity to approve or discard the message before it is sent ๐Ÿ‘€๐Ÿ’….

All security considerations for the use of URLs [RFC1738] apply equally to this protocol. Mail client applications should not support list header field URLs which could compromise the security of the user's system. This includes the "file://" URL type, which could potentially be used to trigger the execution of a local application on some user systems ๐Ÿ’€. Do NOT let that one sneak in, periodt ๐Ÿ™…โ€โ™€๏ธ.


6. Acknowledgements ๐Ÿซถ

The numerous participants of the List-Header [5], ListMom-Talk [6], List-Managers and MIDA-Mail mailing lists contributed much to the formation and structure of this document. The whole crew helped shape this ๐ŸŒธ.

Keith Moore <moore@cs.utk.edu> and Christopher Allen <ChristopherA@consensus.com> provided guidance on the standards process. Legends ๐Ÿ‘‘.


A. Background Discussion ๐Ÿงต

okay so this proposal started out as discussions on the ListMom-Talk Discussion List [6]. When the discussion got big enough, a separate list was formed for discussing this proposal, the List Headers Mail List [5], for deeper discussion ๐Ÿ”. We've included summaries of key issues raised, so you can see some of the alternatives that were examined and the reasons for the decisions that were made ๐Ÿ“.

A.1. Multiple header fields vs. a single header field

Using a single header field to carry command meta-syntax was rejected, and there were a few reasons ๐Ÿ™…โ€โ™€๏ธ.

First, a single field would need a brand new meta-syntax to describe the list commands. The URL syntax was chosen instead, since it's already widely deployed. Every extra layer of complexity and newness makes implementation less likely, because it means more work to support. Also, by using the existing URL syntax, users can lean on what they already know about it and use it even if their client applications don't support the list header fields ๐Ÿง .

Second, restricting the meta-syntax to a single header field brings header field size limitations into the picture. Most individual commands fit easily on one line, but describing a bunch of commands can take up many lines in the field, and that runs a greater risk of being modified by an existing server on route ๐Ÿ“.

Third, implementing the client is easier with multiple fields. Each command can be supported and implemented individually, completely independent of the others. So some list managers or mail clients can choose to implement a subset of the fields based on the specific needs of their own lists ๐ŸŽ€.

Finally, the format described in this document is simple and well recognized, which reduces the chances of errors in implementation and parsing โœจ.

A.2. URLs vs. parameter lists

URLs are already an established syntax. They're flexible, well-defined, and in wide spread use ๐ŸŒˆ. As the URL definition matures and expands, the abilities of the list fields will grow as well, without needing this proposal to be modified. URLs are well prepared to handle future protocols and developments, and they can easily describe the different existing access protocols such as mailto, http and ftp ๐Ÿฆ‹.

Many clients already have functionality for recognizing, parsing, and evaluating URLs, either internally or by passing the request to a helper application. That makes implementation easier and more realistic ๐Ÿ’…. As an example, this existing URL parsing support let the authors add prototype list header functionality to existing mail clients (Eudora and Emailer for the Macintosh) without modifying their source code ๐Ÿคฏ.

A.3. Why not just create a standard command language?

A standard command language, supported by all email list services, would go a long way toward reducing the problems of list access that currently plague existing services. It would cut down on the amount of learning required by end users and allow a number of common support tools to be developed ๐Ÿ› ๏ธ.

However, standardization does pose problems in the areas of multi-lingual support and the custom needs of individual mailing lists. Developing such a standard is also expected to meet with a slow adoption rate by software developers and list service providers ๐Ÿข.

These points don't preclude the development of such a standard. In fact, they would suggest that we should start sooner rather than later. But we do need a solution that can be widely supported by the current list services right now ๐Ÿ’ญ.

We can support most existing list manager command syntaxes without a standard command language. By using URLs, we allow alternate access methods that a standard command language probably wouldn't enable, such as web based control ๐ŸŒ.

Finally, client support for a standard command language is not at all clear, and it isn't necessarily simple to implement. The huge variety and number of commands that exist today would require complicated user interfaces, which could be confusing and difficult to implement ๐Ÿ˜ตโ€๐Ÿ’ซ. By restricting this proposal to the core functions, the client implementation is much simpler. That significantly increases the likelihood of implementation, as evidenced by the support already announced by a number of client and server application authors ๐ŸŽ‰.

A.4. Internationalization

Multilingual support is up to the URL standard. If URLs support it, then the List- header fields support it too. This is another advantage of using URLs as the building blocks for the list header fields ๐ŸŒ.

A.5. Variable Substitution

Variables would let the List- header fields accommodate nearly every existing list manager. However, they would immeasurably increase the complexity of the entire proposal ๐Ÿ˜ฉ. They might also involve redefining the URL standard, or force us to use something more complicated (and hence more difficult to implement) than URLs to describe the command syntax.

Parameters would either have to be mandatory (i.e. the user agent doesn't submit the message if it doesn't know what text to substitute), or you need a way to say "if you know this parameter, add its text here; otherwise, do this" where "this" is either: (a) substitute a constant string, or (b) fail ๐Ÿค”.

The reason you'd want a facility like this is that some list server applications insist on having certain parameters, like users' names, which the user agent might or might not know. For example, listserv insists on having a first name and a last name if you supply either one ๐Ÿ™„.

That could lead to something like the UNIX shell syntax, where ${foo-bar} means substitute the value of parameter "foo" if "foo" is defined, else substitute the string "bar". Perhaps $foo would mean "substitute the value of parameter foo if it is defined, else substitute the empty string" ๐Ÿš.

This all seems far too complicated for the gains involved, especially since the use of variables can often be avoided ๐Ÿ™ƒ.

The use of variables in the command syntaxes of list services appears to be lessening, and it doesn't, in any case, apply to all commands. While the unsubscribe and subscribe command header fields may not be usable by those systems which require the use of variables, the help field will still give end users a consistent point of access through which they can get support for their use of the list ๐Ÿ†˜.

A.6. Why not use a specialized MIME part instead of header fields?

MIME parts were considered. But most mail clients either don't support MIME or aren't equipped to handle such specialized parts, so this approach would cause problems for end users ๐Ÿ˜ฌ. It's also not as easy for many list servers to implement MIME as it is to implement new header fields.

However, the design of a MIME part to more fully describe list command syntax is being looked at, as well as ways to get it supported by the applicable software ๐Ÿ‘€.

A.7. Why include a Subscribe command?

Subscribe and Unsubscribe are the key commands needed by almost every list. Other commands, such as digest mode, aren't as widely supported ๐Ÿ“ฌ.

Also, users who have unsubscribed (before going on vacation, or for whatever other reason) may want to resubscribe to a list ๐Ÿ–๏ธ. Or a message may be forwarded or bounced from a subscriber to a non-subscriber. Or the user may change addresses and want to subscribe from their new address ๐Ÿ“ฎ. Having the List-Subscribe field available could really help in all these cases ๐Ÿ’œ.

A.8. The Dangers of Header Bloat

At what point are there just too many header fields? It really varies from list to list ๐ŸŽญ. On some lists, most users will never notice a field unless the client software provides some alternative user interface to it (kind of like the Reply-To field). On others, users will often see the header fields of messages and be able to recognize the function of the URLs contained within ๐Ÿง.

The flexibility of the protocol described in this document (in that the header fields may be individually implemented as deemed appropriate) gives list administrators sufficient 'room to maneuver' to meet their individual needs ๐Ÿซง.


B. Client Implementation ๐Ÿ“ฑ

B.1. Guidelines โœจ

okay so for mailto based commands, mail clients can totally pop up a little dialog or alert instead of just firing off the command email. ๐Ÿฆ‹ Ask the user to confirm first, and make the message super descriptive: say where it's going and what it'll actually do. Something like:

"Do you want to send the unsubscription command 'unsubscribe
somelist' to 'somelist-request@some.host.com'?  Sending the command
will result in your removal from the associated list."

bestie, this is giving clarity ๐Ÿ’– nobody wants to get unsubscribed by accident ๐Ÿ˜ญ

if the user has more than one email address set up in their client, the app should ask which one to use whenever it can't figure that out on its own, like when subscribing. ๐Ÿ’Œ for unsubscribing and stuff, the address that's actually subscribed is the one to use, unless the app doesn't know it and can't work it out from the message headers. ๐ŸŽ€

B.2. Implementation Options ๐ŸŒธ

these ideas are here to show why the new header fields are so useful and how a client could actually support them. ๐Ÿงš

also, in most cases it may be helpful to disable the interface for these commands when they don't apply to the message you're looking at. ๐Ÿ™ˆ no point showing a "Subscribe" button on a message that doesn't have list headers, periodt.

B.2.1. Key combinations and command lines โŒจ๏ธ

on text based systems that use command lines or key combos, each field could be its own command. ๐Ÿ’œ so one combo subscribes you, another unsubscribes, a third asks for help, and so on. they'd only work on messages that actually have the list header fields. iconic efficiency ๐Ÿ‘‘

B.2.2. Menu items ๐Ÿ“

on graphical systems with menus, these could be a menu or submenu. ๐Ÿ’… picture a "Lists" menu that shows up on messages with the header fields, with items called "Subscribe", "Unsubscribe", "Get Help", "Post Message to List", "Contact List Owner" and "Access List Archive". โœจ the menu could be greyed out when it doesn't apply to the current message, or it could just vanish entirely. main character energy ๐ŸŒˆ

B.2.3. Push Buttons and Pallettes ๐Ÿ”˜

on graphical window systems, buttons could sit in the message window, on a toolbar, or on a little floating pallette all their own. ๐Ÿฆ‹ each button could match a command, labelled "Subscribe", "Unsubscribe", "Get Help", "Post to List", "List Owner" and "Archive". ๐Ÿซถ same deal as before: these can be disabled when they don't fit the message or disappear completely.

B.2.4 Feedback to the User ๐Ÿ’ฌ

okay this part is kind of a big deal ๐Ÿ˜ญ if the client uses a dialog (or some other feedback element), it MUST give the user a way to review the message, and maybe even edit it, before it gets sent. ๐Ÿ›‘ no sending blind, bestie. the app may also find it helpful to link to more detailed, context-sensitive help about mail list access in general. ๐Ÿ“šโœจ


References ๐Ÿ“š

[RFC822] Crocker, D., "Standard for the Format of ARPA Internet Text Messages", STD 11, RFC 822, August 1982.

[RFC1738] Berners-Lee, T., Masinter, L., and M. McCahill, "Uniform Resource Locators (URL)" RFC 1738, December 1994.

[RFC2142] Crocker, D., "Mailbox Names for Common Services, Roles and Functions", RFC 2142, May 1997.

[RFC2368] Hoffman, P., Masinter, L., and J. Zawinski, "The mailto URL scheme", RFC 2368, July 1998.

[5] "List-Header" Mail list. list-header@list.nisto.com <URL:http://www.nisto.com/listspec/mail/> <URL:http://www.nisto.com/listspec/>

[6] "ListMom-Talk" Mail list. listmom-talk@skyweyr.com <URL:http://cgi.skyweyr.com/ListMom.Home>

Editors' Addresses ๐Ÿ’Œ

the editors, in all their glory ๐Ÿซถ

Joshua D. Baer
Box 273
4902 Forbes Avenue
Pittsburgh, PA 15213-3799
USA

EMail: josh@skyweyr.com
Grant Neufeld
Calgary, Alberta
Canada

EMail: grant@acm.org
Web: http://www.nisto.com/

bestie, here's the legal stuff, kept exactly as written so nothing gets lost ๐ŸŽ€

Copyright (C) The Internet Society (1998). All Rights Reserved.

This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.

The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns.

This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. ๐Ÿ’œ

๐Ÿ“ฆ where this page comes from