couriermlm — The Courier mailing list manager
couriermlm
{command
} {directory
} [arg
...]
couriermlm is the Courier mail server's mailing list manager. This command sets up, maintains, and manages mailing lists. couriermlm automatically handles requests to subscribe and unsubscribe list members, detects undeliverable addresses and removes them from the subscription rolls. Mailing lists managed by couriermlm require zero human administrative oversight. couriermlm supports digests, write-only posting aliases, and moderated mailing lists.
Anyone can use couriermlm,
not just the system administrator.
The Courier mail server mail server
translates
an address list-name@domain
as a local address with a corresponding
dot-courier(5)
file.
Anyone who can install a
dot-courier(5)
file, and can schedule
cron(8)
jobs, can run a couriermlm mailing list.
Note that the system administrator can optionally remove the dot-courier(5) support from the the Courier mail server. couriermlm will not work in that case.
Setting up a mailing list consists of the following steps:
Use this command to create a directory where couriermlm keeps all mailing list related files.
The couriermlm create command initializes the mailing list subdirectory with some default template responses. It is necessary to customize them for your mailing list, and it may be necessary to issue some additional commands in order to configure appropriate mailing list options -- such as enabling unrestricted posting privileges, and enabling moderation.
Set up to run couriermlm to distribute mailing list messages, and process requests.
You need to set up cron(8) jobs to run the couriermlm hourly and couriermlm daily commands, which perform regular mailing list maintenance.
This step configures a hook that runs couriermlm as part of the SMTP transaction when receiving mail to a mailing list address, and rejects the mail if it would not be accepted to the mailing list instead of receiving the message and then generating a non-delivery report.
This is an optional step that adds some complexity, but reduces mailing list management issues.
As part of your daily job you should also run the export command, in order to back up the mailing list subscriber information. In the event that the mailing list database gets corrupted or lost, you can restore it from this backup file. See the export command for more information.
Setting up a digest for the mailing list requires additional steps. See "Setting up a mailing list digest" below for more information.
The first step is to run the following command:
couriermlm createdirectory
ADDRESS=list@domain
directory
is the mailing list directory that will
be managed by couriermlm.
This directory should not be created in advance,
this command creates this directory, and initializes it.
list@domain
is the mailing list's address, the
address that sends messages to the mailing list.
An additional setting, URL
may also be specified:
couriermlm createdirectory
ADDRESS=list@domain
URL=url
“url” would be the URL of the WebMLM web page for this mailing list. See webmlmd(1) for more information.
The directory created
by couriermlm create is initialized to contain
a number of text files that couriermlm sends back as
replies to administrative commands. It is necessary to edit these template
files and adjust the text in those files for this mailing list.
All template filenames end with .tmpl
, and their contents
are self explanatory. Some important template files are:
This text is returned in response to the help command. This text must be modified depending upon whether this mailing list is a moderated mailing list, has a digest version, or if any other non-default configuration options are set for the mailing list.
This is the reply that's sent back in response to a
subscription request. Less important is unsub.tmpl
,
which is the response to a request to unsubscribe.
This is the successful subscription confirmation. A brief overview of the mailing list might be appropriate here.
couriermlm has rudimentary support for non-English
templates.
The couriermlm create command has a single, optional
parameter, --lang=
The option must be specified after the mailing list directory's name:suffix
couriermlm createdirectory
--lang=es ADDRESS=list@domain
URL=url
The templates for the stock text files come from
/usr/lib/courier/share/couriermlm
.
This directory contains all the *.tmpl
and
*.html
template files that
couriermlm create installs in the new mailing list
directory
.
Translated versions of template files are installed in the same directory,
/usr/lib/courier/share/couriermlm
.
The translated version of
must be installed
as file
,
for example: file
.suffix
help.tmpl.es
is the translated version
of help.tmpl
, with the “es” suffix.
The --lang=
option
installs the the suffix
.suffix
version of each text template
file, if available.
If not, the stock English template file gets copied, as usual.
Do not remove the English template files, even if you never use them.
They must be left in place, in /usr/lib/courier/share/couriermlm
,
for couriermlm create to work correctly.
Example:
couriermlm create /home/lists/users-list --lang=es ...
This example installs the *.es
versions of mailing list
template files.
Only the stock, English template files come with the
Courier mail server.
This mechanism only provides an easy integration ability with template
files from other sources.
There are some additional configuration files that can be modified to suit your taste:
This file can be initialized to contain any mail headers that will be automatically added to every mailing list message. The contents of this file are simply prepended to every message that goes out. Blank lines are not allowed.
This file lists any headers that will be
automatically removed from every mailing list message
before it's sent. List
each header one per line, including the : character. For example, to
remove all Received:
and
Date:
headers from every message,
initialize this file to contain the following two lines:
Received: Date:
Both the headeradd
and headerdel
files can be
used to implement a popular feature of setting the replies to every message to
go to the mailing list. Having
"Reply-To:
" in
headerdel
, removes any existing
Reply-To:
header,
and then having
"Reply-To:
"
in list@domain
headeradd
appends
a fixed Reply-To:
header to every message.
The create
command also creates the following
subdirectories in the mailing list directory:
This subdirectory has the database files that contain the mailing list's subscription list.
This subdirectory stores files that contain information about addresses that have been unsubscribed from the mailing list. This information might be of some use when tracking down an old subscription. The contents of this directory are not automatically purged, you must set up your own purging mechanism for this directory.
These directories store temporary files that
contain pending (unconfirmed) commands for the mailing list manager. The
couriermlm commands hourly
and
daily
must be executed
regularly in order to periodically purge stale entries.
Messages awaiting moderator approval (for moderated lists).
Messages received by this mailing list will be stored here, in addition to being forwarded to subscribers. couriermlm does not automatically do any purging on this subdirectory, you must set up your own archiving mechanism that cleans out this subdirectory.
The last step involves installing a couple of
dot-courier(5)
files that run couriermlm to receive mailing list messages
and administrative commands. The mailing list address,
list@domain
,
corresponds to some
dot-courier(5)
file. For example, if your
system account is john
, and your mail domain is
example.com
,
then the
dot-courier(5)
file for the mailing list
<john-list@example.com>
is
$HOME/.courier-list
.
Let's say that the
dot-courier(5)
file is
$HOME/.courier-list
. To properly support the mailing list, the
following
dot-courier(5)
files will have to be initialized as
follows:
This file should be initialized to contain the following delivery instruction:
| /usr/lib/courier/bin/couriermlm msg directory
directory
is the created mailing list
directory.
Messages to “POST=subscribers” lists from
non-subscribers get rejected by couriermlm
resulting in delivery failure. This generates a
undeliverable message report, a “bounce”.
Unfortunately this can be abused to generate
a bandwidth amplification attack. Append "; exit 0" to the
.courier
command,
to suppress bounces from delivery failures:
| /usr/lib/courier/bin/couriermlm msg directory
; exit 0
This will suppress all bounces, though, not just the ones resulting from messages from non-subscribers. A better solution is to configure SMTP pre-filtering, as described below. SMTP pre-filtering checks each message before it's accepted from the sending SMTP server. A rejected message does not generate a bounce message, but returns an error to the sending SMTP server, leaving it on the hook for generating bounces.
This file should contain the
appropriate delivery instructions for forwarding all mail
addressed to <list-owner@domain>
to the address of
the
owner of the mailing list. This can be another E-mail address, or a
mailbox specification.
This file should be initialized to contain the following delivery instruction:
| /usr/lib/courier/bin/couriermlm ctlmsg directory
directory
is the created mailing list directory.
This
dot-courier(5)
file provides support for all other addresses of the form
<list-
,
where command
@domain>command
is a mailing list administrative
command. Commands are sent
to this mailing list manager by sending a message to one of several
special addresses, described more fully in "Mailing
list commands", below.
This is an optional step that implements filtering of mailing list messages before each message is received from the sending SMTP server. Otherwise, Courier accepts all messages, and the rejected ones generate a non-delivery report. The report gets E-mailed to the purported sender. Another option is to quietly ignore the rejections, as described above. Either way, non-delivery notifications can sometimes be problematic. This step adds some complexity to the mailing list configuration, but mostly eliminates this problem.
SMTP pre-filtering uses the localmailfilter(7) interface. The following instructions repeat some of the information from the localmailfilter(7) documentation, for convenience. See that documentation for complete information.
The following instructions reference a typical mailing list configuration setup:
A reserved system account called “lists”.
A mailing list's address of
“lists-announcements@example.com”, set up by
installing
$HOME/.courier-announcements
and
$HOME/.courier-announcements-default
(and $HOME/.courier-announcements-owner
)
in lists
's home directory,
as described above.
The mailing list directory
(created by couriermlm create) is
$HOME/announcements
.
The first two steps enable SMTP mail filtering using maildrop, and this should be done as root:
# echo /usr/lib/courier/bin/maildrop >/etc/courier/maildropfilter
This enables SMTP mail filtering to all local mailboxes. All local mailboxes will be able to specify their SMTP mail filters, as explained in localmailfilter(7).
The second step installs couriermlm wrappers for SMTP filters:
# mkdir /etc/courier/maildroprcs # d="/usr/lib/courier/share/couriermlm" # ln -s $d/couriermlm-rcptfilter-ctlmsg /etc/courier/maildroprcs # ln -s $d/couriermlm-rcptfilter-msg /etc/courier/maildroprcs # ln -s $d/couriermlm-smtpfilter-ctlmsg /etc/courier/maildroprcs # ln -s $d/couriermlm-smtpfilter-msg /etc/courier/maildroprcs
The remaining steps are done while logged in as the mailing list owner's account:
$ mkdir $HOME/.mailfilters $ chmod 700 $HOME/.mailfilters
Each mailing list needs four maildrop scripts
installed in .mailfilters
. Using the
“lists-announcements@example.com” list as an example,
owned by lists
's account:
$ cd $HOME/.mailfilters $ cat rcptfilter-announcements LISTDIR="announcements" include '/etc/courier/maildroprcs/couriermlm-rcptfilter-msg' $ cat rcptfilter-announcements-default LISTDIR="announcements" FILENAMEPREFIX="rcptfilter-announcements" include '/etc/courier/maildroprcs/couriermlm-rcptfilter-ctlmsg' $ cat smtpfilter-announcements LISTDIR="announcements" include '/etc/courier/maildroprcs/couriermlm-smtpfilter-msg' $ cat smtpfilter-announcements-default LISTDIR="announcements" FILENAMEPREFIX="smtpfilter-announcements" include '/etc/courier/maildroprcs/couriermlm-smtpfilter-ctlmsg'
And the permissions must be nailed down, as always:
$ chmod 600 $HOME/.mailfilters/*
Each maildrop script sets the
LISTDIR
variable before invoking the
couriermlm wrapper.
LISTDIR
is the name of the mailing list's
directory, in the account's home directory. In this case the
mailing list directory, created by
couriermlm create is
$HOME/announcements
, so
LISTDIR
is announcements
.
It's possible to put mailing list directories in a subdirectory,
and reference the subdirectory here. Mailing list directories' names
cannot contain periods.
Additionally,
the two -default
scripts must set
FILENAMEPREFIX
to their own names, with
the “-default” suffix stripped off.
The easiest way to test this configuration is to use the default mailing list configuration that allows messages only from the list's subscribers, then attempt to send a message to the mailing list, from another SMTP server, using a return address that's not subscribed to the list. The resulting non-delivery report should come from the other SMTP server, and not couriermlm's mail server.
couriermlm may also be run manually from the command line as follows:
/usr/lib/courier/bin/couriermlmcommand
directory
[ options... ]
command
is a command from the following list.
directory
is
the mailing list directory. The commands are:
Create a mailing list.
Update/restore mailing list templates.
The original, default, mailing list message template files
(*.tmpl
and *.tmpl.html
)
are reinstalled into the mailing list directory.
This command must be processed for every mailing list directory after
upgrading to the
Courier server version 0.55, or later,
from earlier versions (but see below).
couriermlm in
version 0.55 of the Courier mail server
uses updated templates files, which must be installed in every mailing list
directory.
Although the names of many template files have not changed, the embedded
markup codes in the template files work differently.
Begin by making a backup copy of all *.tmpl
files
in the existing couriermlm mailing list directory.
Run the “update” command on the list directory.
Review the backed up template files, identify your customized changes, then retype them into new template files installed by the “update” command.
Proceed to the next mailing list directory.
Yes, this is going to be a pain. This is the first overhaul of couriermlm's infrastructure in many years. Once a decade, some elbow grease must be sacrificed in the name of progress. It's not the end of the world.
In an extreme emergency, preserve the couriermlm from
the previous version of the
Courier mail server.
Mass-update all existing lists'
.courier-
and
list
.courier-
files to run the old couriermlm.
Then, migrate each mailing list on a predetermined schedule. After migrating
each list, put the default path back into the list's
list
-default.courier
files.
Keep in mind the following issues, while migrating the lists:
The help.tmpl
template file is usually the one that
gets customized the most. In most cases, large bits and pieces of this
file, that document certain list options that do not apply to this list,
must be removed.
There are several new template files, including a number of
*.html
files that refer to new
HTML-formatted
responses from couriermlm, and the
WebMLM interface.
Be aware of updated mail headers declared in several template files.
The MIME character set is now given as
utf-8
. Some templates no longer contain the
Mime-Version
and Subject
headers.
The Subject
headers are moved to separate template files.
Many existing template files now contain both a plain text and an
HTML-formatted version of the couriermlm
response. Always scroll to the end of each template file, to reveal
any appended HTML portion of template's text.
Set mailing list options, see below.
Manually subscribe an address to the mailing list.
Manually unsubscribe an address from the mailing list.
List all the subscribers to this mailing list.
List write-only aliases for this mailing list.
Export mailing list subscriber information.
Import mailing list subscriber information.
Receive and interpret a control message.
Display a subscription record.
Post a message to the mailing list.
Perform hourly maintenance. It is necessary to set up a
cron(8)
job to execute the hourly
command once an
hour.
Perform daily maintenance. It is necessary to set up a
cron(8)
job to execute the daily
command once a
day.
Create a digest. See "Setting up a mailing list digest" below for more information.
The sub
, unsub
, lsub
,
laliases
, export
, and
import
commands
allow manual subscription list management. Normally, subscription-related
commands are done by sending an appropriate mailing list command, see
"Mailing List Commands", below.
couriermlm subdirectory
user@domain
This command adds the address <user@domain>
to the
subscription list.
couriermlm will now read a free-form comment
or a note from standard input, terminated by an end-of-file (usually CTRL-D).
The free-form comment is stored in the subscription database, together with
the address, and is shown by the "info" command.
couriermlm unsubdirectory
user@domain
This command remove the address <user@domain>
from the
subscription rolls. couriermlm will also read a free-form
comment, which is added to the subscription record. After removing this
address from the subscription rolls, its subscription record is archived in
the directory/unsublist
directory.
couriermlm lsub directory
This command lists all the addresses subscribed to the list, on standard output, one per line.
couriermlm laliases directory
This command lists all write-only aliases that have been subscribed to the list, together with the subscriber address that added each alias. See "Write-Only Aliases" for more information.
couriermlm export directory
The export
command lists the contents of the
subscription database
on standard output. The export command produces the following output
format:
address
subscription information
...address
subscription information
...
"address
", is an address subscribed to the
mailing list. This is
followed by its corresponding subscription information, usually a copy of the
subscription request that was used to add the address to the mailing list. The
subscription information is terminated by a line containing a single period.
Any lines in the subscription information that begin with a period have an
extra period prepended to them.
couriermlm import directory
The import
command reads on standard input a
previously exported
mailing list subscription database, and adds those addresses to the indicated
mailing list.
It is highly recommended to make a regular backup of subscriber information
using the export
command, in the event that the subscription database
gets corrupted. In which case the import
command
can be used to
rebuild the subscription database, in absence of any direct backups of the
database files.
The set
command sets various list options:
couriermlm setdirectory
option=value
option=value...
Setting the ADDRESS
or the URL
options, described below, automatically updates the contents of the
headeradd
configuration file.
Its existing “List-” headers are removed and replaced by
updated “List-” headers that reflect the revised list address
or URL.
One or more options can be set with the same command. The available options are:
address
The base E-mail address for this mailing list.
address
The URL of WebMLM web page for this mailing list.
WebMLM determines its own URL automatically, by reading its HTTP headers. This setting is used by couriermlm, which has no knowledge of the web server's configuration, and needs to know the correct URL to insert into generated messages.
flag
If flag is "1", the userid portion of E-mail addresses are case-sensitive. The domain address portion is always case-insensitive. The default setting is "0" making both userid and domain address portions of E-mail addresses case-insensitive.
Be careful when changing this setting on an active list. Changing this option to “CASESENSITIVE=1”, forces all existing subscribers to make sure their addresses are lowercase-only, otherwise they will no longer be recognized as subscribers. Changing this option to “CASESENSITIVE=0” blocks all subscribed addresses that have uppercase characters in the userid portion of their E-mail address. They will continue to receive mailing list traffic, but unable to post messages to the list, or unsubscribe from it. It will not be possible to unsubscribe those addresses even by running the couriermlm command manually.
directory
Enable digests. directory
is the pathname to the previously-createddigest list directory.
See "Setting up a mailing list digest"
below for more information.
keyword
Set the subject line keyword for mailing list messages. If set, couriermlm inserts "[keyword]" into the subject of every mailing list message, to aid sorting by the recipients.
n
Maximum number of bounce notifications sent by the
hourly
command, in order to prevent the
mail system from being overloaded. The default is 20 bounce notifications.
Any unsent notifications will be carried over to the next hourly job.
n
Maximum number of moderation
reminders sent by the hourly
command, in order to
prevent the mail
system from being overloaded. The default is 20 moderation reminders. Any
unsent reminders will be carried over to the next hourly job.
K
Maximum size, in kilobytes, of a response to the
fetch
command. The default is 100Kb. This option
is used to minimize the impact of abusive requests for the entire archive,
with a forged return address.
name
The name that's listed on the return
address of administrative messages. Note that if
name
contains
spaces, you should quote this argument in the shell. The default value is
"Courier Mailing List Manager".
flag
If flag is "0" couriermlm will not attempt to block misdirected subscribes and unsubscribes that are sent to the mailing list's posting address. If flag is "1" (the default), those kinds of messages will be bounced appropriately.
flag
If flag is "1" couriermlm will use a Delivery Status Notification setting of "never" when it sends confirmation requests and help messages: this should reduce the amount of useless failure notifications generated when couriermlm dutifully replies to spam received by the mailing list administrative addresses, i.e. -(un)subscribe and -help. If flag is "0" (the default), a DSN setting of "fail" will be used. Please see sendmail(1)'s -n option for more details on the DSN setting.
option
Set posting options. option
is
one of three values: "subscribers
" - only subscribers may
post messages to
this mailing list (this is the default); "all
" - anyone
can post messages
to this mailing list; "mod
" - only subscribers may post,
and messages are sent to the list owner for approval (moderation).
flag
Accept mailing list messages with Unicode-formatted headers. The default setting of 0 rejects messages with Unicode headers, and rejects subscription requests from E-mail addresses with Unicode mailbox names.
Most mail servers on the Internet do not implement support for
Unicode messages
at this time. Accepting a Unicode message and redistributing it
to a mailing list results in delivery failures to all
mailing list subscribers that do not implement Unicode support,
so by default this setting is turned off.
Set UNICODE
to 1
to
accept mailing list messages with Unicode headers, and
subscription requests from Unicode mailbox names.
Subscription requests from E-mail addresses that have an international domain name are always accepted if the internal domain name uses ASCII-compatible encoding.
option
Set access to archived messages.
option
is either:
"all
" -
Anyone can access the mailing
list archive; or "subscribers
" - only subscribers can
access the archive.
The default is "all
".
d
Purge archived mailing list
messages after d
days. The default is 0
days - messages are never removed from the archive subdirectory.
d
Wait d
days for the probe
message, that automatically unsubscribes undeliverable addresses, to
bounce (default: 14 days). Probe messages are sent three days (default)
after the first message to an address bounces.
h
Purge unconfirmed subscribe/unsubscribe
requests after h
hours (default: 48 hours).
h
Resend a moderation reminder after
h
hours (default: 12 hours).
address
Mail daily reports of new and removed subscribers to this address. Must be set in order to receive reports. Provide an empty address to stop reporting.
n
If n
is 1
, confirmation
requests may be acknowledged without adding “yes” to the
subject line.
The text in sub.tmpl
, unsub.tmpl
,
and help.tmpl
may need adjusting.
option
Set subscription options.
option
is either "all", meaning that anyone can
subscribe, or
"mod", meaning moderated subscription requests, where all subscription
requests are sent to the mailing list owner for approval. The default is
"all".
n
Send a probe to a bouncing address
n
days after receiving the first bounce.
Basically this means that
an address must bounce for at least n
days before
it gets a probe message. The default is 3 days.
Option names and settings are case sensitive.
If you set up a digest list, you MUST set identical
POSTARCHIVE
option for both the main list and the digest
list.
The info
command displays the subscription record for
the requested address:
couriermlm infodirectory
user@domain
This displays the subscription record for
"user@domain
", which
typically consists of a copy of the initial subscription request, and
confirmation.
The msg
commands reads an E-mail message on
standard input, and
mails the contents of the message to the mailing list's subscribers.
If the POST
option is set to
"subscribers
", the message is
rejected unless the address in its From: header is a subscriber to this
mailing list.
Control files headeradd
and
headerdel
are read,
and are applied to the message, as described previously.
Mailing list commands can be sent via E-mail to
couriermlm by
sending a message to
<list-
. The
"command
@domain>default
"
dot-courier(5)
file runs
couriermlm to receive mail for all addresses of this
form.
couriermlm reads the DEFAULT
environment
variable,
which is set by the Courier mail server,
that indicates the specific command. The available
commands are:
A simple autoresponder. couriermlm
mails the sender the contents of the help.tmpl
file.
A request to subscribe to this mailing list. couriermlm reads the sender's address in order to determine what address to subscribe.
name=domain
Explicitly specify the
address to subscribe to the mailing list, instead of using a return
address. In the previous example, sending a message addressed to
<my-widgets-subscribe-john=domain.com@example.com>
would
result in a subscription request for <john=domain.com>
.
Any unusual punctuation characters in the address must be replaced by a
plus sign, followed by two hexadecimal digits that represent the
punctuation character's ASCII code.
A request to unsubscribe to this mailing list.
name=domain
Explicitly specify the address to unsubscribe from the mailing list.
Set up a write-only alias (see below).
name=domain
Explicitly specify the subscriber address for which a write-only alias needs to be set up.
There are other commands that are used internally for maintaining the mailing list.
Write-only E-mail aliases can send messages to the mailing list, but they
do not receive any mailing list messages themselves. A write-only alias can be
set up by any subscriber. Only one write-only alias is allowed per subscribed
E-mail address. Write-only aliases are not needed for mailing list that has
the POST=all
option set.
To set up a write-only alias, the subscriber sends a
couriermlm alias-subscribe
command.
The subscriber's E-mail address can be
explicitly specified in a similar manner as the subscribe
command.
The subject line of the E-mail message must contain the E-mail write-only alias to be set up, and nothing else. couriermlm responds with a confirmation request, just like when subscribing to the list. This request must be acknowledged in the same way.
A subscriber's write-only alias can be changed at any time by repeating
this procedure. The new alias replaces the previous one. To prevent abuse,
there's a limit of at most one alias-subscribe
command
every 30 minutes.
Leave the subject of the E-mail message blank in order to remove an existing write-only alias,
couriermlm supports mailing list digests.
Mailing list digests are
created as a second, separate, mailing list.
The create
command
initializes a second mailing list directory, and then additional configuration
takes place which links the main mailing list to the digest list.
If the mailing list address is list-address@example.com
, the
address of the digest version of the mailing list is usually
list-address-digest@example.com
,
but it doesn't have to be this
address. The only requirement is that the directory for the digest version of
the mailing list must reside on the same file system as the directory for the
mailing list itself, and both must be owned by the same userid.
To set up a mailing list digest, first proceed with the steps to create the mailing list itself. After the mailing list is created and configured, proceed as follows:
Execute the create
command to
create the digest version of the list:
/usr/lib/courier/bin/couriermlm create \/path/to/digest/list/directory
\ ADDRESS=list-address-digest@example.com
Use the full pathname to the mailing list directory, and the address of the digest version of the mailing list.
Execute the set
command to set any
appropriate options for the digest list. There one important differences
to note: messages are not posted to the digest list directly, so there is
no moderation option, however the digest version of the list can have
moderated subscription requests.
Set the DIGEST
option for the main
mailing list, specifying the directory of the digest list. This keyword
lets couriermlm know that a digest version is
available.
You MUST set identical
POSTARCHIVE
option for both the main list, and the digest
list.
It is necessary to create dot-courier(5) files for the digest list just like the main list, except for some important differences, which are noted below.
It is also necessary to create cron
jobs for the digest list exactly like the main list, to run the
hourly
and daily
cleanup. It's possible to set up one set
of cron jobs to run hourly
and
daily
cleanups consecutively for both lists.
digest
cron(8)
job
The digest
creates and distributes the digest version of the list.
It can be executed by a
cron(8)
job, or the command can be executed manually.
The main mailing list is supported by three
dot-courier(5)
files, as previously described: the posting address, the owner forwarding
address, and the default address that handles administrative control messages.
In the following example, the names $HOME/.courier-list
,
$HOME/.courier-list-owner
, and
$HOME/.courier-list-default
are used to represent each
one of
these files, and the following names are used to represent the
dot-courier(5)
files that correspond to the digest version of the
mailing list: $HOME/.courier-list-digest
,
$HOME/.courier-list-digest-owner
, and
$HOME/.courier-list-digest-default
. Note, however, that
the
digest version of the mailing list can have any name, not necessary the name
of the list, followed by "digest
".
The contents of both $HOME/.courier-list
$HOME/.courier-list-digest
must be the same.
Sending a message
to the digest address should really end up sending a message to the main
mailing
list. Do not put the address of the digest mailing list directory in
$HOME/.courier-list-digest
,
instead specify the address of the
main mailing list directory.
Just copy $HOME/.courier-list
to
$HOME/.courier-list-digest
.
However, the contents of
$HOME/.courier-list-digest-default
must specify the directory of the digest version of the mailing list. The
digest list is managed separately from the main list, it has its own
subscriber list that is separate from the list of subscribers to the main
list. $HOME/.courier-list-default
can simply be copied to
$HOME/.courier-list-digest-default
, then the directory
can be changed in the latter.
$HOME/.courier-list-owner
may use the same mailing list
owner
address as $HOME/.courier-list-digest-owner
, or it can
specify a
different address. The both the digest and the main mailing list can have the
same mailing list owner/moderator, or have a different owner/moderator.
The following command must be executed in order to link the two lists together:
/usr/lib/courier/bin/couriermlm set \/path/to/main/list/directory
\ DIGEST=/path/to/digest/list/directory
Setting the DIGEST
option on the main list lets
couriermlm know that a digest version is available. The
DIGEST
option must either use an absolute pathname, or a
pathname
that's relative to the main list directory (NOT the current directory).
When the DIGEST
option is set, messages are simultaneously
distributed to the mailing list's subscribers, saved in the
archive
subdirectory of the main list, then placed in the
modqueue
subdirectory of the digest list.
Digest list do not
employ moderation -- any moderation must take place on the main list -- so the
modqueue
subdirectory is recycled to compile individual
messages
for the digest.
Finally, something needs to be done in order to actually distribute the digest to the digest list's subscribers. This is done by running the following command:
/usr/lib/courier/bin/couriermlm digest/path/to/digest/directory
N
H
This command creates a digest, and sends it out.
The N
and H
arguments are optional. The digest is created only if there's at least
N
messages that are waiting to be sent in the
digest list, or if the
oldest message is at least H
hours old.
Both options default to 0, so the default behavior is to send a digest
with all unsent messages.
Note that when the digest is created, ALL unsent messages are packaged into
the digest, even if some messages are more recent than the time interval
specified by the H
option. A
cron(8)
job can be set up to
run the digest
command, or run it manually.
couriermlm automatically provides
the From:
,
To:
headers on a message digest. Additional headers may be
specified by the headeradd
file in the digest list
directory. The
headerdel
file has no effect. Note that the individual
messages
in the digest are copies of the messages from the main mailing list, and thus
have the headeradd
and headerdel
headers processed
from the main mailing list directory.
couriermlm will not work if the Courier mail server's support for dot-courier(5) extensions is disabled.