Bounce processing

Use this forum for all questions related to bounce management of OpenEMM

Moderator: moderator

bosco
Posts: 5
Joined: Mon May 02, 2016 9:36 am

Bounce processing

Post by bosco »

Hello,
I successfully installed OpenEMM 2015 R2. We did not follow the manual in detail.
SendMail relay all the emails to SMTP server (Cisco IronPort). Because of that all bounce messages are treated as asynchronous.

I read all the posts about bounce management. The explanation about the processing of bounces was very helpful.
However, one thing still confuses me.

- update.py reads and processes extbounce.log and writes result to bounce_tbl.
- Softbounces in bounce_tbl are processed by softbounce.sh and written to softbounce_email-tbl. Softbounce rules are in script softbounce.py, beginning at about line 200.

What about hardbounces. Should they be written in any table (bounce_tbl or bounce_collect_tbl)?
I found that customer is flagged as bounced in customer_1_binding_tbl, also bounce status is visible in GUI (recipient properties and mailing statistics).

Thanking you in advance.
maschoff
Site Admin
Posts: 2596
Joined: Thu Aug 03, 2006 10:20 am
Location: Munich, Germany
Contact:

Re: Bounce processing

Post by maschoff »

update.py reads and processes data from extbounce.log and writes results to table bounce_tbl. bounce_tbl contains all soft and hard bounces without any filtering. Hard bounces are registered in the binding table as well. Soft bounces are processed daily and entered into another table for further processing (400 = other softbounce, 420 = problems with mailbox, 430 = problems with mailserver, 500 = irregular bounce, 510 = other hardbounce, 511 = unknown address, 512 = unknown domain).

You might want to read the appendix of the OpenEMM Extension Development Guide to understand the various tables and their usage.
OpenEMM Maintainer
bosco
Posts: 5
Joined: Mon May 02, 2016 9:36 am

Re: Bounce processing

Post by bosco »

Thank you for your reply.
For some reason hard bounces are recorded in the binding table but not in the bounce_tbl.

We are still testing the OpenEMM application. I had to update bav.rule so that OpenEMM recognize some bounce messages.
For example I sent test email to non-existent gmail account and get this message:
The following message to <testaccount@gmail.com> was undeliverable.
The reason for the problem: 5.1.0 - Unknown address error 550 - "5.1.1 The email account that you tried to reach does not exist. Please try\n5.1.1 double-checking the recipient's
email address....

OpenEMM did'not recognize this email as a bounce. After I updated Hardbounces section of the bav.rule with this condition "5.1.0 - Unknown address error 550" the message is processed as a bounce (customer_1_binding_tbl, mailing statistics in OpenEMM GUI) but didn't recorded in the bounce_tbl.

What else should I check? Do I have to make some adjustments in update.py?

Kind Regards
maschoff
Site Admin
Posts: 2596
Joined: Thu Aug 03, 2006 10:20 am
Location: Munich, Germany
Contact:

Re: Bounce processing

Post by maschoff »

AFAIK, bounce_tbl is cleaned from all entries older than 90 days. update.py is very conservative regarding hard bounces. Some bounces of code 5xx are only considered as soft bounces. This is based on our real-life experience that some ISPs like to generate 5xx bounces just to get rid of the mail sender.
OpenEMM Maintainer
bosco
Posts: 5
Joined: Mon May 02, 2016 9:36 am

Re: Bounce processing

Post by bosco »

Thanks

So, even if I make a condition in the bav.rule to filter bounces as hard, it doesn't mean that the update.py will have the same verdict.
The bav.rule is used just by bavd to filter bounces to extbounce.log.

Am I right
ud
Posts: 154
Joined: Thu Aug 17, 2006 9:56 am
Location: Munich, Germany
Contact:

Re: Bounce processing

Post by ud »

This case is handled special. As bavd.py is unable to find the DSN for the bounce, but has a rule to mark this as a hardbounce, this is considered as an internal recognized hard bounce and is not written to bounce_tbl. You can edit update.py to write an entry to bounce table by changing line 342:

Code: Select all

elif detail != UpdateDetail.Internal:
to

Code: Select all

else:
-- ud
Post Reply