picolist provides the bare essentials of mailing list and newsletter functionality.

It provides an easy way to set up a mail reflector. It does not provide mailing list management, archiving or moderation.


You need to have Go installed. You can then build the executable with 'go build picolist.go' or 'make'.

basic setup

picolist receives mails on standard input and deletes the first line, which is assumed to be an envelope header from your MTA. It then calls the sendmail command provided by sendmail, qmail, postfix and similar to forward them to list members. List members are defined by 'list'@'domain'.pico files in the executable's directory.

You have to configure your mail transfer agent to pipe incoming mails for a list address to picolist with the appropriate flags. Errors are logged to picolist.log in the executable's directory. picolist does not provide log rotation.

member files

Member files consist of email addresses, one per line. Only bare email addresses without display names are supported. The file may contain empty lines or comments beginning with a hash ('#').





You HAVE to provide --list and --domain as strings to picolist. The full list address is assumed to be 'list'@'domain'. picolist will also set a return path to 'list'-bounces@'domain', so you should set up an alias for that address in your MTA configuration.

You MAY also provide additional flags, in particular:

  • maxsize NUM: change the max size of forwarded emails (default: 6MB)
  • open: allow anyone to post to this mailing list (default: members-only)
  • newsletter: newsletter mode (few-to-many reflection, implies "not open" and an owner file in 'list'@'domain'.pico.owners)
  • debug: also log normal operation (default: only errors)

Postfix setup

Assuming you have configured postfix to use an alias.db, edit your /etc/aliases and add one pipe alias for your mailing list.

thelist: "|/path/to/picolist --list thelist --domain example.com"

Run 'newaliases'.

Then change /etc/postfix/aliases to use the pipe alias and also add a bounce alias:

thelist@example.com thelist
thelist-bounces@example.com your-trouble-mail@example.com

Run 'postmap aliases' and 'postfix reload'. Postfix runs picolist as user 'nobody', so the binary file has to be executable by 'nobody', picolist.log has to be writeable and the member files have to be readable.

picolist assumes sendmail to be in /usr/sbin.

In 2017, really?

Yes. If you know of another way to communicate which does not bind you to one particular company and which is not an isolated/uncommon solution, write me a mail.