Go to file
Baptiste Daroussin bbdc223577 release: 1.4.5 2024-03-26 08:48:37 +01:00
.builds ci: add debian/unstable 2024-03-01 22:16:05 +01:00
contrib Centralize AUTOMAKE_OPTIONS in configure.ac 2024-02-14 11:53:37 -05:00
include probes: fix a regression causing the probes not to sent the bounce numbers 2024-01-11 17:44:42 +01:00
listtexts listtexts: subtree merge 2023-06-26 20:57:59 +02:00
man Fix misc typos 2024-02-12 14:10:47 -05:00
src sendmail: also log the RCPT when receiving a SMTP failure 2024-03-26 08:44:54 +01:00
tests Add GCC pragma ignore to tests 2024-03-01 20:38:00 +00:00
.gitignore Add .gitignore to ignore built files 2024-02-14 16:57:48 -05:00
.hgignore Improve compatibility with recent versions of Automake. 2017-05-25 08:50:33 +10:00
.hgtags Added tag RELEASE_1_3_0 for changeset 570dd6d4942b 2017-05-25 09:08:47 +10:00
AUTHORS Tidy up ChangeLog and AUTHORS. Release candidate 1.2.18rc1. 2012-05-03 10:12:15 +10:00
COPYING Goodbye GPL license, Welcome MIT 2004-06-17 07:11:55 +10:00
ChangeLog release: 1.4.5 2024-03-26 08:48:37 +01:00
FAQ Locallized listtexts for the new patch and updated TODO 2005-05-07 23:11:37 +10:00
Kyuafile Add a basic test suite 2022-10-20 15:50:22 +02:00
LICENSE Goodbye GPL license, Welcome MIT 2004-06-17 07:11:55 +10:00
Makefile.am Add 'atf-sh' detection to configure 2024-03-01 14:55:07 -05:00
README README: Let know new user that project requires a listtexts 2022-11-24 14:56:30 +01:00
README.access Fix access logic so subonlypost doesn't override a send access rule. 2012-01-24 04:08:24 +11:00
README.archives Update URL for mlmmj-webarchiver. 2012-01-31 04:13:27 +11:00
README.exim4 Fix spelling of 'receive' and 'voodoo'; make mlmmj-recieve a symlink 2010-10-03 21:40:42 +11:00
README.footers Add README.footers and footer-related resources. 2015-02-26 07:29:01 +11:00
README.listtexts Document list text search paths. 2016-10-02 23:56:14 +11:00
README.postfix Further revision of README.postfix. 2012-01-30 22:08:56 +11:00
README.qmail Remove .sh from mlmmj-make-ml.sh; symlink original name 2010-10-03 22:12:33 +11:00
README.security README.security 2005-05-01 20:57:52 +10:00
README.sendmail Update email address for README.sendmail author. 2012-01-01 01:17:32 +11:00
TODO Locallized listtexts for the new patch and updated TODO 2005-05-07 23:11:37 +10:00
TUNABLES nobounceprobe: the temporary tunable has been removed 2023-10-13 16:13:03 +02:00
UPGRADE Fix misc typos 2024-02-12 14:10:47 -05:00
configure.ac release: 1.4.5 2024-03-26 08:48:37 +01:00
kyua.conf.in Fix the test suite for Out of tree builds 2024-02-14 16:57:48 -05:00


This is an attempt at implementing a mailing list manager with the same
functionality as the brilliant ezmlm, but with a decent license and mail server

The functionality:

 · Archive
 · Custom headers / footer
 · Fully automated bounce handling (similar to ezmlm)
 · Complete requeueing functionality
 · Moderation functionality
 · Subject prefix
 · Subscribers only posting
 · Regular expression access control
 · Functionality to retrieve old posts
 · Web interface
 · Digests
 · No-mail subscription
 · VERP support
 · Delivery Status Notification (RFC1891) support
 · Rich, customisable texts for automated operations

To use mlmmj, do the following:

 -1) If you're building from source you must make sure you've checked out
    $ git clone https://codeberg.org/mlmmj/listtexts

 0) Compile it if you're not using a binary package such as dpkg, rpm or
    a ports collection from a BSD or Gentoo. To compile, untar the tar-ball
    and do:

    $ autoreconf -i && ./configure && make && make install

		If you want to filter multipart/mime messages, pass the option
		--enable-receive-strip to configure, and take a look at

 1) Configure a recipient delimiter. The default is to use '+', and in
    Postfix it's done by adding

        recipient_delimiter = +

    to /etc/postfix/main.cf. In Exim it can be done by adding

        local_part_suffix = +*

    to the "userforward:" and the "localuser:" router in /etc/exim/exim.conf,
    and also add "local_part_suffix = +*" to the system_aliases function. Also
    make sure that exim will add the envelope from in the Return-Path: header.

    There is a nice FAQ explaining recipient delimiter configuration here:


    The mlmmj TUNABLE "delimiter" configures this on a per list basis

    NOTE: Using '-' as a delimiter is unlikely to work. Mlmmj uses '-' as its
    own kind of minor delimiter. Of course, you also cannot use the delimiter
    in your list names or you will encounter problems.

 2) Create the mailinglist.  There's a script, mlmmj-make-ml, that will make
    a mailinglist for mlmmj. It is highly recommended to use this script to make
    the lists! What is does is described here:

    In the case of a list called mlmmj-test below /var/spool/mlmmj it makes the
    following directories:


    NOTE: The mailinglist directory (/var/spool/mlmmj/mlmmj-test in our
    example) have to be owned by the user the mailserver writes as. On some
    Postfix installations Postfix is run by the user postfix, but still writes
    files as nobody:nogroup or nobody:nobody

 3) Make the changes to your mailserver aliases that came as output from
    mlmmj-make-ml. Following the example above they will look like this:

    mlmmj-test:     "|/usr/bin/mlmmj-receive -L /var/spool/mlmmj/mlmmj-test"

    NOTE: Don't forget newaliases.

 4) Start mlmmj-maintd (remember full path when starting it!) or add it to
    crontab with -F switch. The recommended way for now is to run it via cron:

    "0 */2 * * *  /usr/bin/mlmmj-maintd -F -L /var/spool/mlmmj/mlmmj-test"

    It should be started as root, as mlmmj-maintd will become the user owning
    the listdir (/var/spool/mlmmj/mlmmj-test), and log it's last maintenance
    run to listdir/mlmmj-maintd.lastrun.log.

    If you have several lists below /var/spool/mlmmj you can use -d:
    /usr/bin/mlmmj-maintd -F -d /var/spool/mlmmj

    If you have lists more deeply nested below /var/spool/mlmmj, use
    something like:
    find /var/spool/mlmmj -mindepth 1 -maxdepth 1 -type d \
        -exec /usr/bin/mlmmj-maintd -F -d {} \;

That's it! You probably want to go through the next steps too.

 5) Subscribe some people

    /usr/bin/mlmmj-sub -L /var/spool/mlmmj/mlmmj-test/ -a joe@domain.tld


 6) If you want custom headers like X-Mailinglist, Reply-To: etc. just add a
    file called 'customheaders' in the list control/ directory like this:
    $ cat /var/spool/mlmmj/mlmmj-test/control/customheaders
    X-Mailinglist: mlmmj-test
    Reply-To: mlmmj-test@domain.tld

 7) If you want every mail to have something like:
    To unsubscribe send a mail to coollist+unsubscribe@lists.domain.net

    Just add what you want to a file named "footer" in the same dir as
    "customheaders" (listdir/control/).

 8) If you want a prefix on the subject, to make it look like this:
    Subject: [mlmmj-test] how are we doing?
    Simply do 'echo "[mlmmj-test]" > control/prefix

 9) For having a moderated list, simply create a file called 'moderated' in the
    control/ directory. Moderators are added to a file called 'moderators' in
    the control/ dir as well.

10) Have a look at the file TUNABLES for runtime configurable things.

Tunables in include/mlmmj.h:
 · There's some time intervals for how mlmmj-maintd operates. I've chosen
   non-strict defaults, so depending on your BOFH rate you might want to tweak.
   The defaults should be good for most people though.

Have fun!

	Mads Martin Joergensen <mmj at mmj dot dk>
	Morten K. Poulsen <morten at afdelingp dot dk>
	Ben Schmidt <mail_ben_schmidt at yahoo dot com dot au>