I added more error checking to the code a while ago, possibly when I added the $nouser fix. Without you being on the same version of admin.php as me it's hard to tell what's happening. You should be able to see everything that's going on if you have SMTP debug enabled. A copy of the last few debug messages would give me something to work with. If the error is caused by a connection problem I may need to improve the SMTP error detection.
You should be prepared to overwrite admin.php from time to time. When updates are released things are changed, added, and fixed, and it's not all documented. Perhaps now, before upcoming major changes come into effect, is a good time to refresh yourself on your custom modifications by performing them again on the latest admin.php
I changed code in the pipelining section of admin.php. Non-pipelining SMTP did not have this oversight.
if($bugs){ echo "PIPELINE-FROMmsg=$srvmsg.<br>"; flush(); }
$lastmsg = substr($srvmsg, 0, 3);
if ($lastmsg <> "250") $error = 1; else $error = '';
if(!$error){
$srvmsg = getsmtpmsg($ssock,1024);
if($bugs){ echo "RCPT TO: <$email><br>RCPTmsg=".nl2br($srvmsg); flush(); }
// DEBUG
// if($email == 'bad@listmailpro.com'){ echo " WAS: $srvmsg<br>"; $srvmsg = '550 BADTEST'; }
if($bugs) $rcptmsg = $srvmsg;
$lastmsg = substr($srvmsg, 0, 3);
if ($lastmsg <> "250") {
fputs($ssock, "RSET\r\n");
$srvmsg = fgets($ssock,1024);
if($bugs){ echo "RSETmsg=$srvmsg<br>"; flush(); }
$error = 1; $skiptonext = 1;
if($bugs){ echo "Bad RCPT response: $rcptmsg<br> ($email), skipping.<br><br>"; flush(); }
} else $error = '';
if(!$error){
fputs($ssock, "DATA\r\n");
As for a Perl auto-resume script, I am not as well versed in Perl as PHP. Also, the ListMail admin functions would not be available in a Perl script. An auto-restart script could be written in PHP and called with "wget" with a password the same way Dailymail is.
The trick to restart code is detecting when a queue has stalled or quit sending. This takes storing data somewhere, such as in it's own custom MySQL table / field. The script could check if a batch of emails has decreased in size over the last X minutes.
If we can fix the stalling you won't need the resume code, so let's see if we can get that working first, shall we?
Regards!