town mailing list manager
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
equa de4607f946
init
3 weeks ago
README.md init 3 weeks ago
make_lists.sh init 3 weeks ago
procmailrc init 3 weeks ago

README.md

town mailing list manager

our little bespoke town engine. it runs on a janky procmail script

setup

our system is very particular to running on public unix systems and probably wouldn't be advisable for anything with external mail.

we have our local mail set up so that it's impossible to spoof the envelope sender of an email with local_login_sender_maps in postfix; the list handles this to make the emails look pretty and to evade spoofing

the software works on the assumption that everything lives in the home dir of a user named list. our list account needs two directories, lists/ and archive/. our scripts can autopopulate everything here, but you can also do manual configuration in lists/ to change access control to certain mailing lists.

copy procailrc to ~/.procmailrc and set up ~/.forward to filter all mail through it:

|/usr/bin/procmail

if you want to have any special read-only mailing lists, you can populate lists/LISTNAME.senders with a list of allowed senders, one on each line

a user can subscribe by naming the lists they want to subscribe to in a .townlists file in their home directory rather than checking these lists every post, we populate some internal subscription lists with make_lists.sh, which should run on a cron job.

assumptions

  • mailing list names are [a-z0-9_]{1,16}
    • we check this in the .townlists files and in sending
  • everything lives in our home directory
    • lists/ and archive/ directories exist
  • usernames don't contain special characters
    • i don't actually know which ones would be an issue but town doesn't usually allow anything too crazy anyway

subscriptions

  • everyone we care about lives in /home and their usernames correspond to the directories
  • list subscriptions are stored per-line in .townlists