+ <p>This configuration on its own will make the monthly password
+ reminders, confirmations and all list postings be sent out using
+ VERP</p>
+
+ <p>If you wish to have the advantages of VERP with a lower
+ bandwidth cost, you can enable VERP on occasional list postings
+ rather than on every posting. Mailman will still VERP on all
+ password reminders and confirmations (these are already inherently
+ single recipient mailings), but only on occasional list postings.
+ To make Mailman use VERP on every twentieth list posting (using
+ bulk delivery for the other 19), change:-</p>
+
+<pre>
+ VERP_DELIVERY_INTERVAL = 20
+</pre>
+
+ <p>The downside to doing this is that Mailman may fail to notice a
+ bouncing address if it does not receive at least one bounce per
+ day, so ideally this approach should only be taken if the lists
+ have more than 20 message per day throughput.</p>
+
+ <h3><a href="#index"><a name="persmm">Mailing list personalisation by Mailman</a></a></h3>
+
+ <p>Mailman can also personalise each message it sends out on a
+ list. This allows, for example, the recipient's own address to
+ appear as the To: header, or information specific to them to be
+ placed in the mail footer (although at present personalisation can
+ only be done for normal mail delivery - not for digest
+ subscribers). This personalisation comes at a cost of an
+ individual message per recipient (ie same bandwidth requirements
+ as full VERP) and some processing costs for Mailman.</p>
+
+ <p>To enable personalisation, add the following configuration item
+ to <tt>~mailman/Mailman/mm_cfg.py</tt> (you should also set the
+ VERP settings from above since you have already incurred the costs
+ of VERP):-</p>
+
+<pre>
+ OWNERS_CAN_ENABLE_PERSONALIZATION = 1
+</pre>
+
+ <p>You will then find that in the list administration web
+ interface a new set of options has appeared in the <i>Non-digest
+ options</i> section.</p>
+
+ <h3><a href="#index"><a name="verpex">VERP expansion by exim rather than Mailman</a></a></h3>
+
+ <p>One drawback of VERP is that as well as increasing the
+ bandwidth outgoing mail requires, it also causes Mailman to send
+ one separate message per recipient from Mailman to exim - causing
+ exim to have many many more queue entries and consequently more
+ queue disk space. For example a 20,000 recipient list would
+ require 400MB minimum temporary queue storage for each 20KB
+ message sent to the list. There are also issues of increasing
+ disk traffic/throughput and losing some disk caching
+ advantages.</p>
+
+ <p>These local load problems can be overcome by doing the VERP
+ expansion as the message is sent out from the MTA over network
+ SMTP rather than as the message is injected into the MTA. It will
+ come as no surprise that exim can be configured to do just
+ this.</p>
+
+ <p>Firstly we need to pick up outgoing Mailman mail and send it to
+ a specialised VERP transport. This is done using a router which
+ should be placed just before your normal <tt>dnslookup</tt> router
+ for remote addresses:-</p>
+
+<pre>
+ # Pick up on messages from our local mailman and route them via our
+ # special VERP-enabled transport
+ #
+ mailman_verp_router:
+ driver = dnslookup
+ # we only consider messages sent in through loopback
+ condition = ${if or{{eq{$sender_host_address}{127.0.0.1}}
+ {eq{$sender_host_address}{::1}}}{yes}{no}}
+ # we do not do this for traffic going to the local machine
+ domains = !+local_domains:!+mm_domains
+ ignore_target_hosts = <; 0.0.0.0; \
+ 64.94.110.11; \
+ 127.0.0.0/8; \
+ ::1/128;fe80::/10;fe \
+ c0::/10;ff00::/8
+ # only the un-VERPed bounce addresses are handled
+ senders = "*-bounces@*"
+ transport = mailman_verp_smtp
+</pre>
+
+ <p>Addresses selected by this router should then be passed on to
+ an SMTP transport that does VERP expansion. This should be placed
+ anywhere within the transport section:-</p>
+
+<pre>
+ # Mailman VERP envelope sender address formatting. This seems not to use
+ # quoted-printable encoding of the address, but instead just replaces the
+ # '@' in the recipient address with '='.
+ #
+ mailman_verp_smtp:
+ driver = smtp
+ # put recipient address into return_path
+ return_path = \
+ ${local_part:$return_path}+$local_part=$domain@${domain:$return_path}
+ # must restrict to one recipient at a time
+ max_rcpt = 1
+ # Errors-To: may carry old return_path
+ headers_remove = Errors-To
+ headers_add = Errors-To: ${return_path}
+</pre>
+
+ <p>Once this has been configured, Mailman can be set to not do
+ VERP expansion on normal list deliveries - the VERP
+ configuration should now look like:-</p>
+<pre>
+ VERP_PASSWORD_REMINDERS = 1
+ VERP_PERSONALIZED_DELIVERIES = 1
+ VERP_CONFIRMATIONS = 1
+ VERP_DELIVERY_INTERVAL = 0
+</pre>
+
+ <p>If you have set personalisation on any list, this will still be
+ handled, and VERPed, by Mailman.</p>