Debugging the OpenEMM Bounce Handling Setup
The following is a short summary of things to configure to get OpenEMM bounce handling to work. The problem is mostly setting up the connection from your sendmail setup, through the milter plugin provided by OpenEMM which then communicates with another daemon "bavd" which as I understand it keeps per mail address statistics and writes the bounce results into the DB.
The things that can be the cause for problems are these:
- Your sendmail setup.
- The bav* python scripts not working.
- The bavd daemon not running/working.
- DB access not working
- Missing bounce filter in OpenEMM.
- Missing bounce alias in bav config.
The real good thing is that OpenEMM is so very well documented that you just need to lookup the simple how to documentation and everything will work within 5min... Sorry just kidding! They seem to want to make money on books and support and somehow don't write documentation and rely on endless forum posts of clueless users.
Enough of a rant below you find some hints how to workaround the problem causes I mentioned above:
- Within OpenEMM a bounce filter has to be configured. Name and description do not matter, it just needs to exist.
- The sendmail setup must have milter running the OpenEMM "bav" filter. So /etc/mail/sendmail.mc should have a line like
- The sendmail log (e.g. /var/log/mail.log) must be readable by your OpenEMM user
- Define mail alias matching the bounce filter: Edit your bav.conf-local (e.g.
/etc/openemm/conf/bav/bav.conf-local) and add something like
with "ext_6" being the sender address and ext_12 the bounce filter address.
- Ensure the "bavd" daemon is running (its log file can be found in /var/log/*-<host>-bavd.log)
- Ensure bavd server port 5166 is open
- Ensure mails are passed to bavd (look for "scanMessage" lines in log file)
- Ensure both soft and hard bounces are found (DSN 4.x.x and DSN 5.x.x)
- Ensure the bav filter is running. Check "ps -ef" output for "bav -L INFO"
- Ensure bounces are set your OpenEMM DB instance:
select count(*) from customer_1_binding_tbl where user_status=2;
The meaning of the user_status value is as following:
Value Meaning 1 active 2 hard bounce 3 opt out by admin 4 opt out by user
(see OpenEMM Handbuch)
Also remember that hard bounces might not be generated immediately. In case of soft bounces OpenEMM waits for up to 7 bounces to consider the mail address as bounced.