Rejected emails (SMTP error 550) seem to be ignored

Your software
My Mautic version is: 4
My PHP version is: 7.4.33
My Database type and version is: pdo_mysql 5.7.40-43

Your problem
My problem is: Our very first campaign got us a temporary ban at SiteGround (1 of 3 strikes)

These errors are showing in the log: None

Steps I have tried to fix the problem:

Removed “900” from “Recovery timeout for resending failed messages”

The Queue was already within acceptable use policy. But here I’m making some assumptions:

  • I’m guessing that the issue may be partially avoided (or at least slowed down) by turning off resend of failed messages.
  • I’m also guessing that removing the default value 900 and making this field empty will disable resend on any current run (and help avoid getting another strike).
  • Finally, I did some searching in the code to see if I could find checking for the “550” status but I did not find anything. So, here I’m assuming that I may not have any way to not resend hard fails like the “550” but keep re-sending on for other cases that may indicate a temporary fail.
  • Turning off re-sends probably will not put an email that “does to exist” on the DNC (do not contact) list so we may still have a risk of getting banned as campaigns continue to run and potentially re-send to 550s.

– Recovery timeout was 900 (the default), I removed this value to hopefully work around the issue

Is a 550 status check something we can gather support in adding (also see other permanent failure SMTP status code)? Can anyone confirm there is not something like this already? Seams like this would really help everyone to protect their IP and account reputation. If a server confirms a recipient does not exists, there should never be a case to re-send right? That is a solid valid reply and essential in not getting banned, and maintaining a good reputation, and maintaining an accurate send and do not send list even for any provider even one’s own mail server (implications beyond using SiteGround).

Thank you for your feedback!

cc @riverbear

I looks like it would be a bad idea to leave the Recovery timeout empty. It seams that the popular mailinabox server uses a configuration postgrey_whitelist_clients that makes it a habit to reject “[…] with a temporary error. Hopefully spammers or viruses will not try again later”.

I would never use siteground’s IP to send out emails. I suggest to use a proper STMP service with API capabilities.

Thank you Joey, I have quickly come to agree with you. We are making the change now. It would be nice to get some insight into checking SMTP codes though. Also, this can’t be specific to SiteGround; I’m pretty sure others would look more favorably on code that worked properly given perminate failure codes. I would like to know how that works in real-life (in practice) though. It is reliable, should that be implemented? If so, it seams to me that this could improve IP reputation in some cases and give a bit more smarts into how contacts are handled to try and keep them on the list (maybe retry a bit more or longer for some types of temp errors) v. getting them off the list quick and efficiently and save the effort for ones that matter.

Do you know how “Recovery timeout” works with the SMTP mailserver’s own re-try? I’m thinking that if the SMTP mail server is already re-trying then it may be a bad idea to use a Recovery timeout.

Perhaps this is not the best place for discussion…