RFC 1429
Listserv Distribute Protocol
RFC 1429: Listserv Distribute Protocol ๐
Hiii bestie ๐ okay so this is RFC 1429, all about the Listserv Distribute Protocol. It's from the Network Working Group (the crew that writes the Internet's protocol docs ๐ง) and it's a Request for Comments by E. Thomas of the Swedish University Network, dated February 1993.
It's Informational, because it literally says it "provides information for the Internet community" and does not specify an Internet standard. The title block doesn't list anything it obsoletes or updates, so no drama there ๐
Status of this Memo ๐
Vibe check: this memo is here to provide information for the Internet community. It does not specify an Internet standard. Distribution is unlimited, so share it with everyone ๐ฆ
Abstract ๐ธ
This memo specifies a subset of the distribution protocol that the BITNET LISTSERV uses to deliver mail to huge crowds of recipients ๐ซถ. The protocol is called DISTRIBUTE and it's giving efficiency: it sends a single copy of the message over heavily loaded links, using whatever topological info is available to guide those choices, and it cuts the average turnaround for large mailing lists to 5-15 minutes on the average. This memo also describes a simple interface so non-BITNET mailing list exploders (or other bulk-delivery scripts) can use this service and let the BITNET distribution network handle the delivery ๐
Introduction ๐ง
Running a mailing list with 1,000 subscribers or more on plain "sendmail" while keeping turnaround time reasonable is NOT an easy task ๐ญ. Due mostly to limited bandwidth in the mid-80's, BITNET built an efficient bulk delivery protocol for its mailing lists. It was introduced in 1986, got refined little by little, and now it carries 2-6 million mail messages a day. Literally iconic. This distribution mechanism is a general-purpose delivery service, so any user of BITNET or the Internet can use it. The simple fix for the "sendmail" turnaround problem? Wrap your message and recipient list in a DISTRIBUTE envelope and hand it to a BITNET server for delivery. This may not be the best possible solution, bestie, but it's easy to implement ๐
In this doc, "production" means the normal operation of the mailing list (or bulk delivery app) you want to pipe through DISTRIBUTE. So the "production" options are the ones you SHOULD specify once everything is tested and you're confident the setup works to your satisfaction โจ. The "test" and "debug" options are for playing around with the protocol, but they SHOULD NOT be used for normal operation, because they cost extra bandwidth and CPU time to generate the various informational reports ๐
Last but not least, it's lowkey worth noting that DISTRIBUTE was built to tackle a bunch of issues, some of which only matter for BITNET, and it has evolved since 1986 while keeping a compatible syntax. For the sake of brevity, this RFC only covers a small subset of the available options and syntax, so the syntax may appear unnecessarily complicated or even illogical. Not your fault, bestie ๐ซถ
1. Selecting an entry point into the DISTRIBUTE backbone ๐
Step one: find a suitable site to submit your distributions to. For testing, and for testing ONLY, you can use:
LISTSERV@SEARN.SUNET.SE
For production use, however, you SHOULD select a DISTRIBUTE site in your topological vicinity ๐บ๏ธ. It would make no sense to send your distributions from California to a server in Sweden if most of your recipients are in the US ๐. If your organization is connected to BITNET and your BITNET system is part of the DISTRIBUTE backbone, this ought to be your best bet. Otherwise, you'll want to contact someone who really knows BITNET (or the author of this RFC if you have no BITNET users). Make sure to run through the following checklist before sending any production traffic to the site in question:
a. Do you have good connectivity to the host in question? Does the host, in general, have decent BITNET connectivity? There are still a few sites that insist on using 9.6k leased lines for BITNET even though they have T1 IP access. You'll want to avoid them ๐
b. Send mail to the server with "show version" in the message body (not in the subject field, which gets ignored). Is the server running version 1.7f or higher? If so, it SHOULD NOT have given you the following warning:
>>> This server is configured to use PUNCH format for mail <<<
That warning means messages with lines longer than 80 characters cannot be handled properly. If the software version is below 1.7f, the warning won't show up. Instead, check the first (bottom) "Received:" field. If it doesn't say "LMail", don't use this server, since it probably can't handle messages with long lines ๐
Finally, make sure that the "Master nodes file" isn't older than 2 months. There are a handful of sites that never update their tables because of staffing problems. They can't be prevented from running LISTSERV, but you'll definitely want to avoid them ๐
c. How big is your workload? If you're planning to use the service for more than 10,000 daily recipients, you SHOULD get permission from the LISTSERV administrator ๐, both as a matter of courtesy and to hear about any restrictions or regularly scheduled downtime they might have. For instance, some universities might not allow large distributions during prime time, or they may have several DISTRIBUTE machines and will want to make sure you use the "right" one. Send mail to "owner-listserv" at the host in question and give an estimate of how many daily messages and recipients you'd like to submit. If your message bounces back with "No such local user" or something like it, the server didn't pass test (b) above, and you don't want to use it anyway ๐
An index of sites/hosts that have the REQUIRED configuration and good connectivity, keep their tables up to date, and have generally agreed to provide this service to anyone in their topological area will be published separately in the future ๐โจ
2. Physical delivery of the DISTRIBUTE request ๐ฎ
The request gets delivered via SMTP to the e-mail address from step 1 (for instance, LISTSERV@SEARN.SUNET.SE). Honestly, as long as you can somehow get mail to the server's host, you can use the service. SMTP is just the most convenient way to do it ๐
2.1. Contents of MAIL FROM: field ๐
You SHOULD set the MAIL FROM: field to the address of the person who maintains your mailing list or, generally speaking, to the address of a human who can take action if the message fails to reach the DISTRIBUTE server's host. Thankfully this is super rare ๐ซถ
2.2. Contents of RCPT TO: field ๐ฏ
The RCPT TO: field points to the server's address (for instance, LISTSERV@SEARN.SUNET.SE).
2.3. Contents of the RFC822 header ๐งพ
After the DATA instruction, you MUST supply a valid RFC822 header with a "From:" field pointing to the mailbox that SHOULD receive notifications of delivery problems, bounced mail, and so on. That can be the same as the MAIL FROM: field, or an address like owner-xxxx@yourhost, etc. DO NOT PUT THE LIST SUBMISSION ADDRESS THERE, or you'll get mailing loops ๐
For testing, the "From:" field SHOULD point to your own mailbox, so that you get the responses from the server ๐ฌ
As long as RFC822 syntax is respected, the only field that matters is the "From:" field (or "Sender:", "Resent-From:", etc.). In practice, this means you can just pipe the distribution request into mail listserv@whatever and let your mail program build all the headers ๐ง
3. Format of the DISTRIBUTE request ๐
The body of the message delivered to LISTSERV defines the recipients of the distribution and the text (header + body) of the RFC822 message you want delivered. The request starts with a "job card," followed by a DISTRIBUTE command, a list of recipients, and finally the message header and body ๐
3.1. Syntax of the JOB card ๐ชช
The whole point of the JOB card is to make sure any spurious text inserted by mail gateways or the like gets flushed and isn't accidentally interpreted as a command. It can optionally be used to attach a "job name" to the request, in case you want tools to help you process the notifications you get from DISTRIBUTE servers when running in test mode. The syntax goes like this:
//jobname JOB ECHO=NO
jobname can be anything as long as it has no blanks, and it can be omitted. LISTSERV generally ignores case when parsing commands, so job or Job are both fine if you prefer ๐. The ECHO=NO keyword is REQUIRED for production use, to suppress the "resource usage summary" you'd otherwise get when your delivery finishes. You MAY want to omit it when testing โจ
3.2. Syntax of the DISTRIBUTE command โก
Below the JOB card, you MUST supply this line:
DISTRIBUTE MAIL
For production mode, don't specify anything else on that line. When testing, you SHOULD add ACK=MAIL to get an acknowledgement confirming the delivery. There are two other useful options. DEBUG=YES tells the server to produce a report showing how the various recipients will be routed, without actually delivering the message. TRACE=YES does the same thing but does deliver the message. Before making a "live" test with your actual recipients list, you SHOULD slap DEBUG=YES on once to make sure you got all the parameters and syntax right, and to get a rough idea of the efficiency of the distribution (see the section on performance) ๐
3.3. Giving the list of recipients ๐
The list of recipients follows the DISTRIBUTE line and is specified like this:
//To DD *
user1@host1 BSMTP
user2@host2 BSMTP
/*
The two lines starting with a / have to be copied as-is. Each line in between holds one recipient's address, followed by a blank and the word "BSMTP", which tells the server you don't want the header rewritten. There are four restrictions ๐ง
a. The address MUST be a plain local-part@hostname: no name string, no angle brackets, no source route, etc. Bear in mind that the DISTRIBUTE server is not in the same domain as you, so all the addresses SHOULD be fully qualified ๐
b. If the local-part is quoted, it MUST be quoted from the first word on. Technically, RFC822 allows: Joe."Now@Home".Smith@xyz.edu, but for performance reasons this form isn't supported. Just quote the first word to tell LISTSERV to run the address through the full parser. You'd write "Joe"."Now@Home".Smith@xyz.edu instead ๐
c. The local-part of the address may not start with an (unquoted) asterisk. You can get around this restriction by quoting the local part and using a %-hack through the server's host: "***JACK***%jack-ws.xyz.edu"@server-host.
d. Blanks are not allowed anywhere in the address ๐ซ
You can use the pseudo-domain .BITNET for BITNET recipients. It's always supported within DISTRIBUTE requests ๐
3.4. Specifying the message text โจ
Okay so, after your last recipient and that closing /*, you're gonna add this line ๐
//Data DD *,EOF
Then drop in the RFC822 message (header + body) you want delivered ๐ The EOF option is giving "keep going until the very end" energy. It means the header and body run all the way to the end of the message you're sending to the DISTRIBUTE server ๐ซถ
Now, if you're lowkey worried about extra data getting tacked on by a gateway ๐, you can remove the EOF option, add a closing /* line after the end of the message, and finish with a // EOJ card to flush out any leftover text โจ
Heads up, this one is a little sus ๐ It'll fail if the message itself has a /* line in it. To fix that, you'd have to insert a space before any such line.
4. Examples ๐
Here's an (intentionally short) example to make the syntax click ๐ง
----- cut here -----
//Test JOB
Distribute mail Ack=mail Debug=yes
//To DD *
joe@ws-4.xyz.edu BSMTP
jack@abc.com BSMTP
jim@tamvm1.bitnet BSMTP
jill@alpha.cc.buffalo.edu BSMTP
james@library.rice.edu BSMTP
/*
//Data DD *,EOF
Date: Tue, 19 Jan 1993 10:57:29 -0500
From: Robert H. Smith <RHS@eta.abc.com>
Subject: Re: Problem with V5.41
To: somelist@some.host.edu
I agree with Jack, V5.41 is not a stable release. I had to fall back
to V5.40 within 5 minutes of installation...
Bob Smith
----- cut here -----
Note: some of the hostnames are genuine, but the usernames are all fictitious ๐ธ
You'd get this reply:
--------------------------------------------------------------------
Job "Test" started on 20 Feb 1993 01:09:40
> Distribute mail ack=mail debug=yes
Debug trace information:
ABC.COM goes to SEARN (213) - single recipient
ALPHA.CC.BUFFALO.EDU goes to UBVM (027) - single recipient
LIBRARY.RICE.EDU goes to RICEVM1 (022) - single recipient
TAMVM1 goes to TAIVM1 (247) - single recipient
WS-4.XYZ.EDU goes to SEARN (213) - single recipient
Path information:
TAIVM1 : UGA RICEVM1 TAIVM1
UBVM : UGA UBVM
RICEVM1 : UGA RICEVM1
(Debug) Mail forwarded to LISTSERV@UGA for 3 recipients.
(Debug) Mail posted via BSMTP to jack@ABC.COM.
(Debug) Mail posted via BSMTP to joe@WS-4.XYZ.EDU.
Job "Test" ended on 20 Feb 1993 01:09:40
Summary of resource utilization
-------------------------------
CPU time: 0.086 sec Device I/O: 6
Overhead CPU: 0.045 sec Paging I/O: 5
CPU model: 9221 DASD model: 3380
--------------------------------------------------------------------
To actually perform the distribution and get an acknowledgement, you'd change the first two lines like so ๐
----- cut here -----
//Test JOB Echo=NO
Distribute mail Ack=mail
--------------------
And you'd get this reply ๐ฆ
--------------------------------------------------------------------
Mail forwarded to LISTSERV@UGA for 3 recipients.
Mail posted via BSMTP to jack@ABC.COM.
Mail posted via BSMTP to joe@WS-4.XYZ.EDU.
--------------------------------------------------------------------
Finally, if you drop the Ack=mail keyword, you'd get a "silent" distribution with no acknowledgement, which is the move for production mode ๐
5. Performance โฐ
Okay, so the efficiency of the distribution mostly comes down to how good and accurate the topological information the DISTRIBUTE server has is (and in some extreme cases, system load too ๐). For BITNET recipients, the typical turnaround time for reasonably well connected systems is 5-15 minutes. Internet recipients fall into two categories: those that can be routed to a machine within or close to the recipient's organization (average turnaround time 5-20 minutes ๐ฆ), and those where no topological information is available at all. For that second group, delivery can take way longer, but it usually still beats a vanilla sendmail setup ๐
Right now, topological info exists for most top-level domains outside the US and for lots of sub-domains of EDU and GOV ๐
You can measure the efficiency using the DEBUG=YES option, as explained above ๐ Recipients that get forwarded to another server usually get delivered within 5-20 minutes (except to poorly connected sites or countries, where not much can be done ๐ญ). Recipients handled locally get passed to a local SMTP agent, and its efficiency depends a lot on how many "burst" queries the local name server can handle in quick succession ๐
A number of projects are currently underway to investigate the feasibility of improving the quality of the topological information available to the DISTRIBUTE servers for the Internet ๐ซถโจ
Security Considerations ๐
Okay real talk, this memo doesn't discuss security issues at all, so there's no security content in here ๐
Author's Address ๐
Eric Thomas Swedish University Network Dr.Kristinas vaeg 37B 100 44 Stockholm, Sweden
E-mail: ERIC@SEARN.SUNET.SE
๐ฆ where this page comes from
- ietf: rfc1429 1993-02
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms