Extension:BounceHandler

The BounceHandler extension allows wikis to handle bounce emails efficiently, by:


 * Generate a VERP "Variable envelope Return-Path" on  email invocations.


 * Bounces can be directly fed to the  API from the MTA using a curl POST request

As a result, users whose address is in error are un-subscribed and they are notified through Echo about this the next time they connect on the wiki. More exactly, their address is un-confirmed, and in case MediaWiki requires confirmed emails no emails will be further sent.

Configuration
The extension requires the Mail Transfer Agent (MTA) installed in your mail server to HTTP POST the incoming bounce email to the extension API named as. This can be done by adding the corresponding configurations to your MTA configuration.

Adding bouncehandler router and transport configuration to Exim
You can redirect all your bounce emails to the bouncehandler API directly to do the processing. You can edit your Exim configurations to route all bounce emails to a bounce-handler-router and do HTTP POST to the extension API, which is the recommended method.

Add this to your  

Under the variable declaration section:

under router configuration:

under transports, we need to write the configuration that would HTTP POST to our bouncehandler API

You can find more details in this [https://fosstalks.wordpress.com/2014/07/11/post-ing-bounce-email-to-a-mediawiki-api-directly-from-exim/ blog-post "POST-ing bounce email to a Mediawiki API directly from exim"].

Adding bouncehandler configuration to Postfix
This section shows how the BounceHandler extension can be configured to handle bounced emails from Postfix, unlike the above section which shows how to do the same with Exim.

First of all, please make sure that Postfix & the package "postfix-pcre" are installed. Once these two installed, open up /etc/postfix/main.cf and add the following in the end of the file:

Also, make sure that alias_maps is set to the following:

Save & close that file, and then create a new file called etc/postfix/virtual,, and add the following ode

This will tell Postfix that all the bounced emails (the ones which have return path matching with the above regex expression) should be passed on to the command specified in the alias 'curl_email'.

Now we need to define curl_email as our alias, so save & close this file, open up /etc/aliases and add the following:

Save & close that file, and now type the following commands, to map your /etc/postfix/ to postfix, and then restart postfix:

Save and close this file, and head over to your MediaWiki's LocalSettings.php and make sure add the following line:

Once that is done, save and close this file. To test if this works, send an email to an invalid email to your server and then run:

To check if your email bounces were captured, check the bounce_records table in your MediaWiki database, and /var/log/mail.log for further testing.

API
The BounceHandler extension installs an API  to receive the HTTP POST from the mail server. The API has a parameter  to which the entire bounce email is URL encoded to. This helps in avoiding the use of a separate bounce collector inbox or other IMAP features for the extension to work.

Example API call:

This would send a bounce email with the body  for processing.

VERP address
The extension creates a unique VERP address as the Return Path header to every single email send from the wiki installation. The generated VERP address is of the form wiki-testwiki-2a-nanrfx-Tn14EQZWaotS2XNn@verpwebhost.wmflabs.org

The general template of the generated VERP address is: $prefix-$wikiName-base36( $userID )-base36( $timestamp )-base64( hash( $algorithm, $key, $data ) )@$email_domain