Hello everyone
We have a serious issue generating an endless loop in the queue processing, resulting in never-ending sending attempts, logs and email reports.
When the domain name of a recipient of a newsletter becomes unavailable or is out of buisness and the SMTP server of our ISP respond << 450 4.1.2 <someone @dead-domain.org>: Recipient address rejected: Domain not found >>, there is a endless loop in phpList and it DoS the SMTP by keep on retrying over and over. As this is a temporay failure and not a bounce (4xx and not 5xx), phpList enters in a endless loop trying to contact this non existing email address over and over. We tried to add “.* Domain not found” in bounce filter but it did not work. How unsubscribe or flag as unconfirmed email with not resolvable domains and avoid this enless loop?
It seems that this issue was already brought up a few times but remains unanswered:
- PHPList keeps trying to send to a failed address
- https://stackoverflow.com/questions/36080273/phplist-keeps-trying-to-send-to-a-failed-address
To put things into context, here is what happened to us:
Basically, a subscriber’s mail and domain name seem no longer to exist and this subscriber was never unconfirmed in the campaign list.
When the campaign’s queue was processed, PHPList kept repeating the sending attempt, processing the following pattern over and over:
QUOTE
Error sending email to someone @dead-domain.org SMTP Error: The following recipients failed: someone @dead-domain.org : Recipient address rejected: Domain not found
Processed 1 out of 1 subscribers
1 failed (will retry later)
Finished this run
Error sending email to someone @dead-domain.org SMTP Error: The following recipients failed: someone @dead-domain.org : Recipient address rejected: Domain not found
Processed 1 out of 1 subscribers
1 failed (will retry later)
Finished this run
[etc]
UNQUOTE
In this instance, we received 267 email reports (and as many corresponding logs / attempts within the system) in less than a minute. We had to interrupt the processing queue manually to stop the flood.
Understandably, our email hosting provider did not like it a bit and blocked our sending email address in response to avoid server overload.
We tried to put on several bounce rules, but none of them work since the email is never bounced but is merely rejected .
Our ISP only sends an error 450 4.1.2. message in response to the failed attempt (not a definitive 5xx error).
QUOTE
nc mail.isp .com 25
220 mail.isp .net ESMTP ready
EHLO h3web310.ISP .net
250-mail.ISP .net250-AUTH PLAIN LOGIN
250 STARTTLS
AUTH PLAIN ***************************************************************
235 2.0.0 OK
MAIL FROM: <hopeless @sender.net>
250 2.1.0 Ok
RCPT TO: <someone @dead-domain.org>
450 4.1.2 <someone @dead-domain.org>: Recipient address rejected: Domain not found
QUIT
221 2.0.0 Bye
Out
UNQUOTE
As a result, PHPList believes it still has a chance and gives it another try and another try and another try and another…
We will contact our ISP and ask whether it could return << 550 5.1.2 <someone @dead-domain.org>: Recipient address rejected: Domain not found >> so phpList can give up quickly. Nonetheless we still believe that PHPList should include a maximum limit of retry for 450 via a config variable.
The situation is very annoying since we can never predict when a contact’s email / domain is going to turn invalid.