ezmlm - format of ezmlm directory
An ezmlm directory, dir, stores information about an ezmlm
mailing list. ezmlm-make creates dir; ezmlm-sub and
ezmlm-unsub manipulate the subscriber list stored under
dir; ezmlm-manage handles administrative requests automat-
ically; ezmlm-send sends a message to all subscribers
listed in dir and also maintains a message archive and
message subject index if the list is configured to do so.
ezmlm-reject rejects messages that have an empty subject,
or a subject consisting of only a command word; ezmlm-
return handles bounces; ezmlm-warn warns users for which
messages bounce and eventually removes them from the sub-
scriber list. ezmlm-idx can create a subject index from
an existing list archive. ezmlm-get manages message,
index, and thread retrieval from the archive, as well as
the generation of message digests; ezmlm-cron provides a
restricted interface to cron for the generation of digest
generation trigger messages; ezmlm-store queues messages
of moderated lists and sends a moderation request to the
moderator(s); ezmlm-moderate processes moderation requests
to accept the queued message to the list via ezmlm-send,
or to return the message to the sender; ezmlm-clean cleans
up the moderation queue and returns to the sender any mes-
sages that have timed-out; ezmlm-gate posts messages that
come from a SENDER in an address database, and sends
remaining messages out for moderation; ezmlm-check is used
to diagnose problems with ezmlm mailing list configura-
tion; ezmlm-issub and ezmlm-issubn determine if a SENDER
is a subscriber or a member of a collection of addresses;
ezmlm-tstdig determines if it is time to create a new
digest based on the number and volume of messages and the
amount of time that has passed since the last digest was
issued; ezmlm-request can be used to answer ezmlm commands
in the subject line easing migration from other mailing
list managers. It can also function as a global interface
mimicking the interface of other mailing list manager.
ezmlm-glmake can set up the global interface, and ezmlm-
glconf can create a configuration file for the global
interface from your lists.
dir/subscribers is a directory containing the subscriber
list. ezmlm-manage allows automatic subscription if
The list is hashed into 53 files, named @ through t in
ASCII. A nonexistent file is treated as an empty file.
Each file contains a series of addresses. An address can
be any string of non-NUL characters up to 400 bytes long.
Each address is preceded by the letter T and followed by a
For reliability, when an address is added to or removed
from the mailing list, the relevant file is recreated
under a temporary name inside dir/subscribers and then
moved into place.
dir/key is a binary file. ezmlm-manage uses dir/key to
create confirmation numbers. Anyone who can guess the
contents of dir/key can forge subscription requests.
ezmlm-make does not put much effort into making dir/key
difficult to guess; for better security, you should add
some random garbage to dir/key.
dir/archive is a directory containing messages previously
sent to subscribers. ezmlm-send archives all new messages
if dir/archived exists. If dir/indexed exists, ezmlm-send
also maintains a message subject and author index.
Messages sent to the mailing list are numbered from 1
upwards, whether or not they are archived. dir/num is the
number of messages sent so far followed by ':', followed
by the cumulative amount of message body that has passed
ezmlm-send stored as kbytes * 4 (4 corresponds to 1kb).
dir/archive has subdirectories, each subdirectory storing
up to 100 messages. Message number 100m+n, with n between
0 and 99, is stored in dir/archive/m/n. For example, mes-
sage number 15307 is stored in dir/archive/153/07. The
message index is stored in the file index in the same sub-
directory of dir/archive holding the corresponding mes-
sages. Thus, the subject index contains up to 100
The subject index contains message subjects that are nor-
malized so that the original message and all replies have
the same entry. The subject index is used for advanced
message retrieval functions. For safety, the subject index
is created under a temporary name inside dir/archive and
then moved into place.
ezmlm-manage will ignore message files without the owner-
execute bit set. ezmlm-send turns on the owner-execute
bit after safely writing the message to disk.
ezmlm-make by default adds ezmlm-get to dir/manager to
handle -get, -index, and -thread requests. If ezmlm-make
is invoked with a digcode command line argument, digest
creation is enabled by putting this argument on the ezmlm-
get command line.
dir/bounce is a directory containing bounce messages.
ezmlm-return stores several types of files here.
ezmlm-make sets up four files to control mailing list
deliveries. Each file is a series of delivery instruc-
tions in dot-qmail format.
dir/editor handles incoming mailing list submissions.
ezmlm-make sets up dir/editor to invoke ezmlm-send to
immediately forward each message to all subscribers and
then to run ezmlm-warn.
dir/owner handles incoming messages for the mailing list's
owner. ezmlm-make sets up dir/owner to store messages in
dir/Mailbox and then to run ezmlm-warn.
dir/bouncer handles incoming bounce messages. ezmlm-make
sets up dir/bouncer to invoke ezmlm-return. ezmlm-warn is
no longer invoked here due to the load it places on sys-
tems with many large lists with many bounces.
dir/manager handles incoming administrative requests.
ezmlm-make sets up dir/manager to invoke ezmlm-get, ezmlm-
manage, and then ezmlm-warn.
dir/moderator handles incoming message accept and reject
requests for moderated lists. ezmlm-make sets up dir/mod-
erator to invoke ezmlm-moderate, and .BR ezmlm-clean .
ezmlm-get can create digests if it is invoked from the
command line, from dir/editor, or from dir/manager. The
program functions in slightly different ways in these 3
settings (see ezmlm-get(1)).
To enable automatic digests for a mailing list, use the
ezmlm-make -d switch. To also enable the generation of
digests at specific times dictated by mailed trigger mes-
sages, a digcode should be specified on the ezmlm-get com-
mand line. This can be done by specifying digcode as a
fifth argument to ezmlm-make when setting up the list.
digcode must be alphanumeric and is case-insensitive.
To generate trigger messages, use ezmlm-cron(1) as an
interface to crond(8) or use crond directly.
dir/num contains the number of the last message processed,
followed by ':' and a number that is increased by 1 for
each 256 bytes of message body text processed. The latter
number is used by ezmlm-tstdig to determine if a new
digest is due.
dir/dignum contains the contents of dir/num at the time of
the last regular digest creation, followed by a ':',
followed by a timestamp. It is updated after each regular
digest is sent.
dir/digissue contains the issue number of the last regular
digest. It is incremented for each regular digest sent.
The following user crontab entry (all on one line) gener-
ates a digest of the list firstname.lastname@example.org at 1600 every
00 16 * * * /var/qmail/bin/qmail-inject list-dig.digcode
Alternatively, ezmlm-cron can be used:
% ezmlm-cron -t 16:00 list@host digcode
ezmlm-get can also be run from the shell: To generate a
digest to list-digest@host from the list housed in
% ezmlm-get ~joe/list
Like other ezmlm-get replies, digest can be sent in sev-
eral formats. See ezmlm-get(1) for more info.
There are three aspects of moderation: moderation of
posts, moderation of subscriptions, and "remote adminis-
tration", i.e. giving the moderator the right to (un)sub-
scribe any user. ezmlm handles these three aspects sepa-
rately. The two first aspects enhance security, while the
third decreases security, but makes list administration
considerably easier. By default, the moderator database is
the same for all three functions. While "remote adminis-
tration" and subscription moderation always use the same
database, the moderators for message moderation can be
Even with subscription moderation, the user has to verify
the request. This is to ensure that the user initiating
the request really controls the address. ezmlm-manage
options exist to disable the user handshake, which may be
useful in some circumstances.
For moderation options, the moderators are by stored in a
subscriber list in moddir/subscribers. By default moddir
Moderators can be added and removed with:
ezmlm-sub moddir moderator@host
ezmlm-unsub moddir moderator@host
For subscription moderation, touch dir/modsub after adding
moderator(s). For remote administration, touch
dir/remote. If the contents of these files start with a
leading forward slash, it is assumed to be the name of
moddir subscription moderation. If both files exist and
start with a forward slash, the dir/remote contents are
ignored. Moderators are stored in a subscriber list in the
subscribers subdirectory of moddir. If no directory names
are specified, the default, dir/mod, is used. In all
cases, the subscribers subdirectory of the base directory
must exists/be created.
Moderation of messages is achieved by creating dir/modpost
and modifying dir/editor to invoke ezmlm-store. ezmlm-
store stores the message in dir/mod/pending and sends a
moderation request to all moderators stored in moddir.
If dir/modpost does not exist, ezmlm-store posts messages
directly, and ezmlm-clean does nothing.
If dir/modpost contains a directory name starting with a
forward slash, this directory is used as moddir for mes-
sage moderation. Moderators are stored in a subscriber
list in the subscribers subdirectory of moddir. If no
directory names are specified, the default, dir/mod, is
dir/moderator is linked to dot-accept-default and
dot-reject-default. It handles replies from the modera-
In addition to a moderator list, the directories
dir/mod/pending, dir/mod/accepted, and dir/mod/rejected
must exist. These directories contain the message modera-
If dir/mod/modtime it determines the minimal time in hours
that messages wait in the moderation queue, before they
are returned to sender with the message in dir/text/mod-
If a -help command is send for a moderator and dir/modsub
or dir/remote exist, a more detailed help message stored
in dir/text/mod-help will be sent together with the regu-
lar help. This text should not contain secrets. If
dir/text/mod-help does not exist, dir/text/help will be
If a -list command is sent for a moderator and dir/modsub
or dir/remote exist, and the ezmlm-manage -l command line
switch is specified, a subscriber list will be returned.
If an -edit.file command is sent for a moderator and
dir/remote exist, and the ezmlm-manage -d command line
switch is specified, text/file is returned together with
an ezmlm cookie. The remote administrator may return an
edited version of the file, which will be stored, provided
that the cookie is valid. See ezmlm-manage(1) for more
dir/text is a directory containing files sent out by
ezmlm-manage in response to administrative requests:
top Introducing ezmlm. This is placed at the
top of each response.
bottom Explaining how to use ezmlm. This is
placed at the bottom of each response.
sub-confirm Explaining how to confirm a subscription
sub-ok Acknowledging successful subscription.
sub-nop Acknowledging a subscription request for an
address already on the mailing list.
sub-bad Rejecting a bad subscription confirmation
unsub-confirm Explaining how to confirm an unsubscription
request, and explaining how to figure out
the subscription address.
unsub-ok Acknowledging successful unsubscription.
unsub-nop Acknowledging an unsubscription request for
an address not on the mailing list.
unsub-bad Rejecting a bad unsubscription confirmation
get-bad Rejecting a bad archive retrieval request.
digest Text copied into the Administrativia sec-
tion of the digest. Usually, this will con-
tain subscription info for the digest, as
well as information on how to post to the
trailer If this files exists, it is copied to the
end of all messages to the list.
faq Sent in response to the faq command. Usu-
ally contains frequently asked questions
and answers specific for the mailing list.
info Sent in response to the info command. Usu-
ally contains a descripition, policy, etc,
for the list. The first line should in
itself be a very brief description of the
bounce-warn Pointing out that messages have bounced.
bounce-probe Pointing out that a warning message has
bounce-num Explaining that ezmlm-return has kept a
list of bounced message numbers.
dig-bounce-num Explaining that digest messages have
bounced. All other text files are used for
both the main list and the digest list.
bounce-bottom Separating the bounce message.
mod-help is set to list moderators issuing a -help
command. It contains instructions for mod-
erators, but it is relatively trivial for a
non-moderator to read it. Don't put secrets
mod-reject is the returned to the sender of a rejected
mod-timeout is returned if the message timed-out with-
out moderator action.
mod-sub is added to the text confirming subscrip-
tion and unsubscription instead of bottom
and the requesting message, for actions
that were approved by a moderator. Not
copying the requesting message hides the
moderator identity from the subscriber.
mod-request is the text sent to the moderators to
request moderator action on a posted mes-
Requesting that the moderator confirm a
request to subscribe. If this file does
not exist, sub-confirm will be used.
Requesting that the moderator confirm a
request to unsubscribe. If this file does
not exist, unsub-confirm will be used.
edit-do Instructions sent to the remote
administrator together with a copy of a
dir/text file and editing instructions.
edit-list A list of editable files in dir/text with a
one-line description send to a remote
administrator in response to a -edit com-
edit-done Sent to the remote administrator after an
edited dir/text file has been successfully
Several tags in the text files are replaced by ezmlm pro-
grams. All programs replace the tag <#l#> with the name
of the list or the list-digest, as appropriate for the
request, and <#h#> with the hostname for the list. ezmlm-
send and ezmlm-get replace <#n#> with the current message
number in added headers from dir/headeradd and text files.
ezmlm-get does this for digest messages, where the current
message is the number of the first message in the digest.
ezmlm-manage replaces the tag <#A#> anywhere on a line
with the subscription address, and <#R#> anywhere on a
line with the address the subscriber must reply to. Only
the first tag on any line is processed.
For backwards compatibility, ezmlm-manage replaces the
line !A in any of these files with the name of the sub-
scription address. It replaces the line !R in sub-confirm
and unsub-confirm with the address that the subscriber
must reply to.
ezmlm-store replaces the tag <#A#> anywhere on a line with
the address for accepting the message, and <#R#> anywhere
on a line with the address for rejecting the message.
Only the first tag on any line is processed.
For backwards compatibility, ezmlm-store also replaces the
line !A with the address for accepting the message and the
line !R with the address for rejecting the message.
OUTGOING MESSAGE EDITING
dir/headerremove is a list of bad header field names, one
per line. ezmlm-send removes these header fields from all
outgoing messages. ezmlm-make sets up dir/headerremove to
remove Return-Path, Return-Receipt-To, and Return-Path
dir/headeradd is a list of new header fields. ezmlm-send
adds these fields to every outgoing message. ezmlm-send
sets up dir/headeradd to add X-No-Archive: yes and Prece-
If dir/mimeremove exists, ezmlm-send removed parts with
the corresponding content-types from composite MIME
messages. If the ezmlm-reject dir argument is specified,
simple MIME messages of these content-types are rejected.
If dir/mimereject exists, and the ezmlm-reject dir argu-
ment is specified, simple MIME messages of these content-
types, or composite MIME messages with any body part of
these content-types are rejected.
If dir/sequence exists, the first line is added as a
header to all outgoing messages, followed by a space and
the message number. The message number is useful for
archive retrievals, since some mail systems do not reveal
the return-path to the user. NOTE: Sublists have their
own message counter. Adding a sequence header from a sub-
lists will give you the sublist message number which is
different from the main list message number.
dir/prefix is a subject prefix. If this file exists, its
contents are prefixed to the subject of the post in the
outgoing message. The archived message is not processed.
Attempts are made to not duplicate an existing prefix in
replies. Think twice before using this option. A prefix
takes unnecessary space on the subject line and most mail
clients can easily filter on other headers, such as 'Mail-
ing-List:'. If dir/prefix contains a single '#', this will
be replaced by the message number. The use of this feature
is inadvisable and violates internet mail standards. How-
ever, it is very popular in e.g. Japan. If you must use
this feature, make sure you are aware that you may be
causing problems to users, sublists, etc.
dir/text/trailer is a message trailer. If this file
exists, it's contents are copied to the end of outgoing
messages. Only lines terminated with new-line are copied.
No trailer is copied to the archived version of the mes-
The first line of dir/mailinglist is a line of text.
ezmlm-send creates a new Mailing-List field, showing the
contents of dir/mailinglist, in every outgoing message.
The first lines of dir/outlocal and dir/outhost give the
outgoing name of the mailing list. These are used by
ezmlm-manage and ezmlm-send to construct sender addresses
for outgoing messages.
The first lines of dir/inlocal and dir/inhost give the
incoming name of the mailing list. These are used by
ezmlm-manage to parse incoming envelopes. Normally inlo-
cal and inhost are the same as outlocal and outhost, but
sometimes they are different, with outlocal@outhost for-
warded to inlocal@inhost.
If dir/sublist exists, this mailing list is a sublist,
redistributing messages from a parent mailing list. The
first line of dir/sublist is the name of the parent list.
This affects the behavior of ezmlm-send.
If dir/msgsize exists, it is assumed to contain
``max:min'', where ``max'' is the maximum size in bytes of
an acceptable message body, and ``min'' the corresponding
minimal size. Either will be ignored if zero or omitted.
If the ezmlm-reject command line specifies the list direc-
tory, messages not meeting the size criteria are rejected.
If dir/charset exists, the first line is assumed to repre-
sent a valid MIME character set, which is used for all
outgoing MIME messages sent by ezmlm-get and the message
moderation programs. The character set string may be suf-
fixed with ':' and 'Q' or 'B' to send all outgoing text
(ezmlm messages, digest table-of-contents, moderation
requests, etc) encoded in ``Quoted-Printable'' or
``base64'' encoding. By default, no encoding is done,
which may result in the transmission of characters with
the high bit set. When encoding is specified, trigger mes-
sages and other parts of the reply that should not be
encoded are sent as separate MIME parts.
dir/lock is an empty file. Any program that reads or
writes the subscriber list, or adds messages to the
archive, locks dir/lock.
dir/Log is an advisory log of subscription and unsubscrip-
tion actions. WARNING: Log is not protected against sys-
tem crashes. Log entries may be missing or corrupted if
the system goes down. There is Log for each of the acces-
sory address databases as well. Thus, the log for digest
subscribers is dir/digest/Log. If enabled, these logs can
be retrieved by remote administrators (see ezmlm-man-
dir/digest contains items specific for the digest list.
dir/digest/subscribers contains hash files of digest sub-
dir/digest/Log, dir/digest/bounce, dir/digest/lockbounce,
and dir/digest/lock have functions for the digest list
that mirror that of the corresponding files in dir.
dir/sql contains SQL server access information for list
that are configured to use an SQL database for storage.
dir/tstdig is a timestamp used temporarily by ezmlm-tst-
dig(1) to coordinate digesting.
ezmlm-check(1), ezmlm-clean(1), ezmlm-gate(1), ezmlmget(1)
, ezmlm-idx(1), ezmlm-issub(1), ezmlm-issubn(1),
ezmlm-list(1), ezmlm-make(1), ezmlm-manage(1), ezmlm-moderate(1)
, ezmlm-request(1), ezmlm-return(1), ezmlmsend(1)
, ezmlm-store(1), ezmlm-sub(1), ezmlm-tstdig(1),
ezmlm-unsub(1), ezmlm-warn(1), dot-qmail(5)
© 1994 Man-cgi 1.15, Panagiotis Christias <email@example.com>