README.footers
-Footers in Mlmmj
-================
+# Footers in Mlmmj
Mlmmj's built-in footer support is very rudimentary. It will work for plain
text emails, and that's about it. It doesn't understand HTML or MIME or
Here are some pre-processors you can use.
-alterMIME
----------
+## alterMIME
The mlmmj-amime-receive script is designed to work with a program called
alterMIME. The script itself (in amime-receive in the contrib directory)
contains links to that software, and instructions.
-Foot Filter
------------
+## Foot Filter
alterMIME didn't allow me to reach my particular goals, so I wrote an
alternative called Foot Filter. It is a single source-file C program; the code
-and a very simple Makefile can be found in foot_filter in the contrib
+and a very simple Makefile can be found in foot\_filter in the contrib
directory, along with an altered version of mlmmj-amime-receive, called
mlmmj-recieve-ff.
Foot Filter will output documentation if you run it without arguments, and
again, instructions for the script that handles the piping are found within it.
-Py-MIME
--------
+## Py-MIME
A third option is Py-MIME. It was developed for use at The Document Foundation
(LibreOffice) and is included in pymime in the contrib directory.
# A map to forward mail to a dummy domain
virtual_alias_maps = hash:/var/spool/mlmmj/virtual
- # Allow virtual alias maps to specify only the user part of the address
- # and have the +extension part preserved when forwarding, so that
- # list-name+subscribe, list-name+confsub012345678, etc. will all work
+ # Allow virtual alias maps to specify only the user part of the address
+ # and have the +extension part preserved when forwarding, so that
+ # list-name+subscribe, list-name+confsub012345678, etc. will all work
propagate_unmatched_extensions = virtual
# A map to forward mail for the dummy domain to the Mlmmj transport
6) (For each list) Add entries to the Postfix tables to accept mail for the
list and forward it to the Mlmmj transport:
- /var/spool/mlmmj/virtual:
- list-name@domain.tld domain.tld--list-name@localhost.mlmmj
+ /var/spool/mlmmj/virtual:
+ list-name@domain.tld domain.tld--list-name@localhost.mlmmj
- /var/spool/mlmmj/transport:
- # for a flat structure
- domain.tld--list-name@localhost.mlmmj mlmmj:list-dir
- # for a hierarchical structure
- domain.tld--list-name@localhost.mlmmj mlmmj:domain.tld/list-name
+ /var/spool/mlmmj/transport:
+ # for a flat structure
+ domain.tld--list-name@localhost.mlmmj mlmmj:list-dir
+ # for a hierarchical structure
+ domain.tld--list-name@localhost.mlmmj mlmmj:domain.tld/list-name
Note that we have used a dummy domain 'localhost.mlmmj' to connect the
virtual alias with the Mlmmj transport. This could be anything as long as
+++ /dev/null
-|------------------------------------------------------------------------------|
-| Using mlmmj with qmail (and vpopmail) |
-|------------------------------------------------------------------------------|
-|--------------- Fabio Busatto <fabio.busatto@programmazione.it> --------------|
-|------------------------------------------------------------------------------|
-
-This mini-HOWTO is a step-by-step guide for using mlmmj with qmail MTA
-(http://www.qmail.org/), and it has been successfully tested also with vpopmail
-virtual domains (http://www.inter7.com/vpopmail/).
-
-Prerequisites:
-- qmail (and vpopmail) correctly installed
-- mlmmj correctly installed
-
-Conventions:
-- ${BINDIR}: directory with mlmmj binary files (/usr/local/bin/)
-- ${LISTDIR}: directory with list configuration files
- (/var/spool/mlmmj/listname)
-- ${DQFILE}: dot-qmail file (see below)
-
-Configuration:
-- the first thing you've to do is to create the list, using the
- mlmmj-make-ml script (follow the classic procedure to do this step)
-- enter the control directory for the list (${LISTDIR}/control/), and execute
- the following command:
- # cd ${LISTDIR}/control/; echo '-' > delimiter
-- chown and chmod the file according to the mlmmj configuration
-- create dot-qmail files for the list to handle direct requests and extensions:
- # echo -e "|${BINDIR}/mlmmj-receive -L ${LISTDIR}" > ${DQFILE}
-- chown and chmod the files according to the qmail (and vpopmail) configuration
-
-WARNING: REMEMBER that the delimiter is -, so do not use + when composing mail
-addresses for extensions!!!
-
-WARNING: DO NOT USE 'preline' command in dot-qmail files, it will result in
-mlmmj to not work properly!!!
-
-|------------------------------------------------------------------------------|
-
-Example:
-
-- Configuring mlmmj to handle ml@programmazione.it mailing list using qmail as
- MTA and vpopmail for virtual domain support:
-
-# mlmmj-make-ml -c vpopmail:vchkpw -L ml
-Creating Directorys below /var/spool/mlmmj. Use '-s spooldir' to change
-The Domain for the List? [] : programmazione.it
-The emailaddress of the list owner? [postmaster] : postmaster@programmazione.it
-The path to texts for the list? [/usr/local/share/mlmmj/text.skel] :
-chown -R vpopmail:vchkpw /var/spool/mlmmj/ml? [y/n]: y
-
-# cd /var/spool/mlmmj/ml/control/
-# echo '-' > delimiter
-# chown vpopmail:vchkpw delimiter
-# cd /home/vpopmail/domains/programmazione.it/
-# echo -e "|/usr/local/bin/mlmmj-receive -L /var/spool/mlmmj/ml/" > .qmail-ml
-# cp -a .qmail-ml .qmail-ml-default
-# cat *-default
-# chown vpopmail:vchkpw .qmail-ml .qmail-ml-default
-# chmod 600 .qmail-ml .qmail-ml-default
-
-|------------------------------------------------------------------------------|
-|--------------- Fabio Busatto <fabio.busatto@programmazione.it> --------------|
-|------------------------------------------------------------------------------|
--- /dev/null
+This mini-HOWTO is a step-by-step guide for using mlmmj with qmail MTA
+(http://www.qmail.org/), and it has been successfully tested also with vpopmail
+virtual domains (http://www.inter7.com/vpopmail/).
+
+Prerequisites:
+- qmail (and vpopmail) correctly installed
+- mlmmj correctly installed
+
+Conventions:
+- ${BINDIR}: directory with mlmmj binary files (/usr/local/bin/)
+- ${LISTDIR}: directory with list configuration files
+ (/var/spool/mlmmj/listname)
+- ${DQFILE}: dot-qmail file (see below)
+
+Configuration:
+- the first thing you've to do is to create the list, using the
+ mlmmj-make-ml script (follow the classic procedure to do this step)
+- enter the control directory for the list (${LISTDIR}/control/), and execute
+ the following command:
+
+ # cd ${LISTDIR}/control/; echo '-' > delimiter
+
+- chown and chmod the file according to the mlmmj configuration
+- create dot-qmail files for the list to handle direct requests and extensions:
+
+ # echo -e "|${BINDIR}/mlmmj-receive -L ${LISTDIR}" > ${DQFILE}
+
+- chown and chmod the files according to the qmail (and vpopmail) configuration
+
+WARNING: REMEMBER that the delimiter is -, so do not use + when composing mail
+addresses for extensions!!!
+
+WARNING: DO NOT USE 'preline' command in dot-qmail files, it will result in
+mlmmj to not work properly!!!
+
+----
+
+Example:
+
+- Configuring mlmmj to handle ml@programmazione.it mailing list using qmail as
+ MTA and vpopmail for virtual domain support:
+
+ # mlmmj-make-ml -c vpopmail:vchkpw -L ml
+
+ Creating Directorys below /var/spool/mlmmj. Use '-s spooldir' to change
+ The Domain for the List? [] : programmazione.it
+ The emailaddress of the list owner? [postmaster] : postmaster@programmazione.it
+ The path to texts for the list? [/usr/local/share/mlmmj/text.skel] :
+ chown -R vpopmail:vchkpw /var/spool/mlmmj/ml? [y/n]: y
+
+ # cd /var/spool/mlmmj/ml/control/
+ # echo '-' > delimiter
+ # chown vpopmail:vchkpw delimiter
+ # cd /home/vpopmail/domains/programmazione.it/
+ # echo -e "|/usr/local/bin/mlmmj-receive -L /var/spool/mlmmj/ml/" > .qmail-ml
+ # cp -a .qmail-ml .qmail-ml-default
+ # cat *-default
+ # chown vpopmail:vchkpw .qmail-ml .qmail-ml-default
+ # chmod 600 .qmail-ml .qmail-ml-default
+
+
+----
+Fabio Busatto <fabio.busatto@programmazione.it>
+++ /dev/null
-Using sendmail + VERP
-
---------------------------------------------------------------------------------
-
-The following configuration enables VERP (http://cr.yp.to/proto/verp.txt) which
-is useful for mailing list managers that are able to take advantage of that
-feature.
-
-This configuration is currently used for using the mlmmj manager
-(http://mlmmj.mmj.dk) with VERP enabled + sendmail.
-
-The hack consists in hooking VERP rewriting in a replacement ruleset for the
-existing EnvFromSMTP one (called VerpEnvFromSMTP). This is going to work *only*
-if we are splitting messages with multiple recipients in separate queue files
-since the macro we are using for the rewriting ($u) is not set when multiple
-rcpt are present.
-
-The first step consists in forcing envelope splitting, this is done using the
-QUEUE_GROUP feature, here we are definining r=1 (max 1 rcpt per message) for the
-default queue group:
-
-
-QUEUE_GROUP(`mqueue', `P=/var/spool/mqueue, F=f, I=1m, R=2, r=1')
-
-
-Since we are going to split a lot it's advisable to use the FAST_SPLIT option,
-additionally we need to enforce return-path inclusion in the local mailer:
-
-
-define(`confFAST_SPLIT', `100')dnl
-define(`LOCAL_SHELL_FLAGS', `eu9P')dnl
-
-
-Then we define a regex map for matching the addresses that we are going to
-rewrite, in our example we'll rewrite addresses like
-
-<listname+bounces-123@domain.net>
-
-with
-
-<listname+bounces-123-user=foo.net@domain.net>
-
-where user@foo.net is the recipient address of the message. So we need to apply
-our verp ruleset *only* to those addresses. Additionally we are also adding the
-Delivered-To header:
-
-
-LOCAL_CONFIG
-Kmatch_verp regex -m -a@VERP (listname\+bounces\-[0-9]+<@domain\.net\.?>)
-H?l?Delivered-To: $u
-
-
-Here's the ruleset, the first half of the ruleset is the existing EnvFromSMTP
-ruleset present in default sendmail.cf, the seconf half is the VERP stuff:
-
-
-SVerpEnvFromSMTP
-R$+ $: $>PseudoToReal $1 sender/recipient common
-R$* :; <@> $@ list:; special case
-R$* $: $>MasqSMTP $1 qualify unqual'ed names
-R$+ $: $>MasqEnv $1 do masquerading
-
-R $* $: $(match_verp $1 $) match the address
-R $* + $* < @ $* . > $* @VERP $: $1 + $2 - $&u < @ $3 . > $4 VERP rewrite it using $u macro and add VERP string for failsafe
-R $* - < @ $* . > $* VERP $: $1 < @ $2 . > $3 if $u wasn't defined rewrite the address back
-R $* - < $+ @ $+ > < @ $* . > $* VERP $: $(dequote $1 "-" $2 "=" $3 $) < @ $4 . > $5 replace the "@" in rcpt address with "="
-R $* - $+ @ $+ < @ $* . > $* VERP $: $(dequote $1 "-" $2 "=" $3 $) < @ $4 . > $5 replace the "@" in rcpt address with "="
-
-
-Finally we need to rewrite the mailer definition for the used mailer (typically
-esmtp) specifying VerpEnvFromSMTP as the sender rewrite ruleset:
-
-
-MAILER_DEFINITIONS
-Mesmtp, P=[IPC], F=mDFMuXa, S=VerpEnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
- T=DNS/RFC822/SMTP,
- A=TCP $h
-
-
-
-NOTE: for mailing list servers it's also a good idea keeping existing
-Delivered-To headers, sendmail needs the following patch for doing this
-
---- sendmail/conf.c.orig 2004-07-14 21:54:23.000000000 +0000
-+++ sendmail/conf.c 2004-12-06 15:22:05.000000000 +0000
-@@ -117,6 +117,7 @@
- { "content-length", H_ACHECK, NULL },
- { "subject", H_ENCODABLE, NULL },
- { "x-authentication-warning", H_FORCE, NULL },
-+ { "delivered-to", H_FORCE, NULL },
-
- { NULL, 0, NULL }
- };
-
-
-Andrea Barisani <andrea@inversepath.com>
--- /dev/null
+Using sendmail + VERP
+=====================
+
+The following configuration enables VERP (http://cr.yp.to/proto/verp.txt) which
+is useful for mailing list managers that are able to take advantage of that
+feature.
+
+This configuration is currently used for using the mlmmj manager
+(http://mlmmj.mmj.dk) with VERP enabled + sendmail.
+
+The hack consists in hooking VERP rewriting in a replacement ruleset for the
+existing EnvFromSMTP one (called VerpEnvFromSMTP). This is going to work *only*
+if we are splitting messages with multiple recipients in separate queue files
+since the macro we are using for the rewriting ($u) is not set when multiple
+rcpt are present.
+
+The first step consists in forcing envelope splitting, this is done using the
+QUEUE\_GROUP feature, here we are definining r=1 (max 1 rcpt per message) for the
+default queue group:
+
+
+ QUEUE_GROUP(`mqueue', `P=/var/spool/mqueue, F=f, I=1m, R=2, r=1')
+
+
+Since we are going to split a lot it's advisable to use the FAST\_SPLIT option,
+additionally we need to enforce return-path inclusion in the local mailer:
+
+
+ define(`confFAST_SPLIT', `100')dnl
+ define(`LOCAL_SHELL_FLAGS', `eu9P')dnl
+
+
+Then we define a regex map for matching the addresses that we are going to
+rewrite, in our example we'll rewrite addresses like
+
+ <listname+bounces-123@domain.net>
+
+with
+
+ <listname+bounces-123-user=foo.net@domain.net>
+
+where user@foo.net is the recipient address of the message. So we need to apply
+our verp ruleset *only* to those addresses. Additionally we are also adding the
+Delivered-To header:
+
+
+ LOCAL_CONFIG
+ Kmatch_verp regex -m -a@VERP (listname\+bounces\-[0-9]+<@domain\.net\.?>)
+ H?l?Delivered-To: $u
+
+
+Here's the ruleset, the first half of the ruleset is the existing EnvFromSMTP
+ruleset present in default sendmail.cf, the seconf half is the VERP stuff:
+
+
+ SVerpEnvFromSMTP
+ R$+ $: $>PseudoToReal $1 sender/recipient common
+ R$* :; <@> $@ list:; special case
+ R$* $: $>MasqSMTP $1 qualify unqual'ed names
+ R$+ $: $>MasqEnv $1 do masquerading
+
+ R $* $: $(match_verp $1 $) match the address
+ R $* + $* < @ $* . > $* @VERP $: $1 + $2 - $&u < @ $3 . > $4 VERP rewrite it using $u macro and add VERP string for failsafe
+ R $* - < @ $* . > $* VERP $: $1 < @ $2 . > $3 if $u wasn't defined rewrite the address back
+ R $* - < $+ @ $+ > < @ $* . > $* VERP $: $(dequote $1 "-" $2 "=" $3 $) < @ $4 . > $5 replace the "@" in rcpt address with "="
+ R $* - $+ @ $+ < @ $* . > $* VERP $: $(dequote $1 "-" $2 "=" $3 $) < @ $4 . > $5 replace the "@" in rcpt address with "="
+
+
+Finally we need to rewrite the mailer definition for the used mailer (typically
+esmtp) specifying VerpEnvFromSMTP as the sender rewrite ruleset:
+
+
+ MAILER_DEFINITIONS
+ Mesmtp, P=[IPC], F=mDFMuXa, S=VerpEnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
+ T=DNS/RFC822/SMTP,
+ A=TCP $h
+
+
+
+NOTE: for mailing list servers it's also a good idea keeping existing
+Delivered-To headers, sendmail needs the following patch for doing this
+
+ --- sendmail/conf.c.orig 2004-07-14 21:54:23.000000000 +0000
+ +++ sendmail/conf.c 2004-12-06 15:22:05.000000000 +0000
+ @@ -117,6 +117,7 @@
+ { "content-length", H_ACHECK, NULL },
+ { "subject", H_ENCODABLE, NULL },
+ { "x-authentication-warning", H_FORCE, NULL },
+ + { "delivered-to", H_FORCE, NULL },
+
+ { NULL, 0, NULL }
+ };
+
+
+Andrea Barisani <andrea@inversepath.com>