PHPList endless loop when 450 Recipient address rejected: Domain not found

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:

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.

You would want to determine what that email address is, and delete it from your phpList system. That will solve the issue.

Hi, almost two years later this is still the case with latest version. @danwaterloo your answer is… meh. This is obviously a bug and should be addressed as such. It should not retry indefinetly or at least put some big delay between tries.

As for workaround, we have added to config_extended.php
define(‘SEND_QUEUE_PROCESSING_REPORT’, false);

in order to not get message flood in case of Domain not found reject.
As suggested in other threads, we monitor processing and suspend sending to stop retries. Then remove the problematic addresses.