Table of Contents

kiss_procmail_list.rc

A procmail based script to run simple and small mailing lists

Description

kiss_procmail_list.rc allows to create simple and small mailing lists to facilitate e-mail communication of a bunch of people. It is definitely no replacement for full-blown mailing lists such as provided by Mailman. It's for cases where all their features are not required and the number of participants fit into a procmail recipe ;-)

(Non-)Features

Usage/Installation

The script is installed in the .procmailrc of the person who will be the list-moderator, who will be in charge of subscribing and unsubscribing participants and who will receive messages which were intended for the list but didn't fit the criteria.

So, create an alias address for the list that points to the account where the script is included. For example, add the following to /etc/aliases assuming that coolrat is the username of the list-moderator:

example-l: coolrat

In coolrat's .procmailrc setup the list by setting the required variables (see the script for details) and then INCLUDERC the script itself. For example:

# KISS example mailing list
LISTNAME="eXample-L"
LISTADDRESS="$LISTNAME@example.net"
LISTFILE="$HOME/example_list_subscribers.txt"
INCLUDERC="$HOME/kiss_procmail_list.rc"

Finally, we need to add the e-mail addresses of the participants to example_list_subscribers.txt. The format is 1 address per line wrapped in < and >. For example:

<coolrat@example.net>
<otherrat@example.org>

Postfix forwarding loop workaround

When I installed the script on my account running Postfix my own address was of course included and triggered Postfix' mail forwarding loop detection. So, we need to carefully work around it. Here's an example of what I used:

# KISS example mailing list
LISTNAME="eXample-L"
LISTADDRESS="$LISTNAME@example.net"
LISTFILE="$HOME/example_list_subscribers.txt"
:0
* $ ^((Resent-)?To|CC): (.*[<+])?$LISTADDRESS(>|$)
* !$ ^(From|Return-Path:) .*$LISTNAME
{
  # workaround postfix mail loop bouncing for our own address
  :0 f
  * ^Delivered-To: coolrat@example\.net$
  | formail -I Delivered-To:
 
  INCLUDERC="$HOME/kiss_procmail_list.rc"
}

Download

kiss_procmail_list.rc

Disclaimer

Use at your own risk! Not much tested yet, tried only on Debian 7. Feedback and bug reports welcome.

1)
The script checks whether the sender's "From:" address is "subscribed" to the list. Optionally, this can be turned off, and one can setup other means of sender verification.
2)
It'd be trivial to add VERP but it's pointless since the number of participants should be small anyway and bounces are handled manually.
3)
Probably, one could work around this limitation with some more procmail foo. Right now, the script is a "delivering recipe". So, even if it is included/run multiple times, a single message is delivered only once unless a "c" flag is used to generate a carbon copy.