Is softbounce still broken in Mautic? Goes straight to DNC?

With a client installation we see, that soft bounces (with Mailjet it thats relevant) seem to go straight to DNC. Thus the behavior is like a real hard bounce?

When I did a research I found those relevant info at Github:

By being added directly to DNC, it looks like there is no second chance for a soft bounced recipients mail.

How do you handle it? Did you find a workaround?

Looks like there is no differentiation of soft bounce / hard bounce in Mautic?

Int value of the reason. Use Contacts constants: Contacts::UNSUBSCRIBED (1), Contacts::BOUNCED (2), Contacts::MANUAL (3). Default is Manual

My question: Is Mautic or the Mailjet adapter to differentiate the comments section of the bounce to identify if it should go to DNC or not? Or is Mautic putting all Bounced Contacts to DNC?

Can you plz check the unsub reason for this particular contact?
It should contain the error message as reason for unsubscribe.

Looks like this:

Hi @joeyk … sure, I looked them up in the database. The problem is, as long as the reason can be such different things hiding in the comments - from simple things like temporary problems to spam, the comments would need to be analyzed to have the proper treatment of the bounce.

There is only one DNC Reason for bounce - it doesn’t differentiate between Soft and Hard Bounce. The comments are completely different by provider. So the specific adapter needs to handle it. I tried to look up in the code, if the Mailjet adapter makes any difference in handling by comment. But I havn’t found any indication that it will be analyzed.

See an example from the DB log.

  • “:” until now Mailjet Support wasn’t able to properly explain that reason
  • “mailjet:preblocked” this contact was preemptively blocked by Mailjet, as there was some trouble with other Mailjet accounts sending to this contact (can be manually asked to be lifted) → should not land on the DNC list
  • “system:connection issue” → should not land on the DNC list.
  • “spam:sender blocked” → should go to DNC
  • “recipient:user unknown” → should go to DNC

So my question is: is there any part in the code - either core or mailer system adapter - that analyses that comments?

If we could check for the DNC reason / comment, we could easily build a campaign the continuously handles that bounces properly. For now I will work with my client to regularly remove DNC for reasons that don’t qualify for DNC.

Not sure if Amazon SES / Sparkpost Adapters are more advanced in Mautic?

Yeah, I can relate to this.
Each providers sends a different webhook as feedback loop.
They all have their own ‘language’ (which sucks) and Mautic tries to understand what that provider meant.
The general idea is , that response codes which start with 4xx are soft, 5xx are hard bounces.
I know for sure, that Amazon SES does a lot better job then this what you’ve show, so does Sendgrid.
Maybe reach out to @Abu_Musa on slack, he can help.

1 Like

I am using Amazon SES, where the differentiation between soft and hard bounce works fine. But I was writing my own bounce handling in n8n, because it gives me more granular control on how often a soft bounce is being sent, etc. If you are interested, I think that can be adapted to Mailjet as well.

1 Like

Hi Dirk

I could confirm this is an issue. We disable the Mautic bounce handling and use our own script to classify the bounce as soft (do nothing) or hard bounce (set do not contact via mautic api).

Another problem: the original bounce message from the bounce mail is not stored in mautic. This would make things easier.


1 Like

Mailjet stores the bounce reason within Mautic. If it was available in a campaign, the bounce handling could actually be a campaign :wink:

DNC reason is not the bounce reason?

Hi Joey

In most cases: no. The reason is the interpretation result from mautic not the real bounce message.
And there are a lot of misinterpretations of the bounce messages.

For example: some email provider send bounce messages about mails that got greylisted. These are emails which just get delayed. Mautic sets them to do not contact with a bounce reason I forgot but which is not related to the real reason.

So I think it would be good to have the original messages in the bounce reason to re-evaluate.


1 Like

Hello Sebastian,
We also have our own bounce and complaint processing partially due to the fact, that everything runs through Amazon and we needed our own solution to understand whos email quality needs to be improved.
I think the problem is, that these messages are changing as the providers are evolving, and Mautic needs to re-align the classification from time to time, which we don’t have capacity to do :frowning:

Hey Joey

Same here. The problem is: there is a huge ampunt of email providers and each one of them got a different behaviour and use differnt messages.

Some providers also tend to use only the maillog and don’t (or rarely) send bounce messages.

One of the best email bounce classification open source project is this one:

They support a huge amount of email providers and I think they are the best starting point for the email bounce classification.



Looks awesome, thank you for sharing.

1 Like

At the moment I also collect different Bounce Messages. I would like to compile a lists with different reaons and the classification in : Soft Bounce or Hardbounce or Client Action needed

So far the webhooks of mailjet don’t even differentiate between hard and soft bounce. They only have a bounce webhool. This means unless you evaluate bounce reason and comment, it will always have wrong results (too many set to DNC).