maildir-bulletin(1) programs to send mail to all maildir users in a group


maildir-bulletin [-s] group [groups]


This manual page documents briefly the maildir-bulletin, command.

It is used to send a bulletin to multiple users, it does this by creating a file in /var/lib/maildir-bulletin/bulletins for each group that the message is to be sent to. Then hard links are created from that file to a file in the ~/Maildir/new directory of every user in that group. Such files can then be read by any Maildir capable program including POP servers.

It expects to receive the message on standard input (IE the usual proceedure is to run it from /etc/aliases). Error messages will be produced on standard output (for the bounce email) and written to /var/log/bulletin.err. Results of successful runs will be logged to /var/log/bulletin.log.

It is designed to be run as SUID root so that it can deliver mail inside the users' home directories.


The main command-line parameters are the names of groups to send to. At least one group name must be specified.

The -s option specifies that sym-links are to always be used. They will be used anyway if hard links fail.


This program is much better than sending email to each user because it's much faster to deliver, and as it uses the same file name and Inode for each user it should not be difficult to un-send a bulletin. Also it will only take disk space for a single copy of the message which will be really handy if you wish to send a 20K email to 30000 users!

This program is much better than using the bulletin service in some POP servers because it supports virtually unlimited numbers of bulletins, and allows you to easily change mail server, POP server, or whatever and still keep the same bulletin setup.

It is currently about 500 lines of C code. The only external program to get run is /usr/bin/sed. Also if correctly installed only the mail delivery group will be able to run it so I consider it unlikely that there are any security problems.

Running "ls -l" on the bulletins directory shows you how many users have not read the bulletin yet (link count - 1).


The message can contain a line BULLETIN_EXPIRES:yyyy-mm-dd Which specifies the data that the message should expire on. Such a line is removed from the message before delivery and stored in the file name in the bulletins directory. This is then used by the expiry program to remove old bulletins.

You can rename the file to change the expiry date if it has hard links. If it has symbolic links then renaming it will break all the links.


/var/log/bulletin.log /var/log/bulletin.err
A list of administrator email addresses and groups ("ALL" will match any group) seperated by spaces with one address per line. Each line lists a group that the particular administrator will be listed as "Sender:" for. I am not sure that this feature is even needed.
Same format but for the "To:" field.
A list of administrator email addresses and groups ("ALL" will match any group) seperated by spaces with one address per line. When email comes in the "From:" field is checked against this to determine whether the specified address is allowed to send a buttetin to the group(s) in question. Poor security really, but that's life on the net.

If want [email protected] to be able to send bulletins to everyone and [email protected] to send bulletins to staff then have the following:

[email protected] ALL

[email protected] staff


The main directory for config files.
Temporary directory for sed input - do not make this a link to /tmp, it must be a directory that is only writable by root.
Where the bulletin files are stored.


If you specify a month greater than 12 or a day greater than the number of days in the month this won't be taken as an error. Month 13 means that it won't expire until the next year, day 32 means it won't expire until the next month. Maybe someone will consider this a feature.

Specifying a year greater than 2038 should work, but then the bulletin won't expire until you move to a 64bit Unix platform.


This program, it's manual page, and the Debian package were written by Russell Coker <[email protected]> while under contract to Cap Gemini. I had to re-write their bulletin program anyway so it made sense to do it properly and release it as open source.


The source is available from