An SMTP log of zero bytes or a queue that won't send could be because the queuing script dies or is killed by the server before sending.
A script like this could be used to see if your server ignores set_time_limit:
<?phpset_time_limit(0); // unlimited$time_to_run = 400; // seconds to run$start=time();$last=$start;while(1){ $diff=$now-$last; $now=time(); if($diff>0){ $last=$now; echo ($now-$start).'.. '; flush(); } if($now-$start>=$time_to_run) break;}?>
A crude band-aid that would at least see that messages that were able to be queued are sent out would be a script like this:
<?php// fix LMP queues that stall. include this script in resume.php after config.php and admin.php, or run manually from separate cron job. script requires writable queuefix.dat in same folderinclude_once('./config.php');include_once('./admin.php');if($file_version>'1.88') exit("Fatal Error: queuefix at http".(!empty($_SERVER['HTTPS'])?"s":"")."://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']." needs to be updated to use mysqli");$log='';$echolog=false; // set to true for output// read last recorded data$fdata=file_get_contents('./queuefix.dat');if($fdata) $log .= "existing data:\n".nl2br($fdata)."\n\n"; else $log .= "no existing data\n";$lines=explode("\n",$fdata);$data=array();if(!empty($lines)){ foreach($lines as $line){ list($batid,$msgcnt)=explode(':',$line); $data[$batid]=$msgcnt; }}// read current data$out='';$now=time();// v1.88 mysql_if($file_version<='1.88'){ $rows=mysql_query("select batid from lm_sendp where completed = 'q';"); if(mysql_num_rows($rows)>0){ $log .= "found queued messages, processing..\n"; while(list($batid)=mysql_fetch_row($rows)){ $log .= "batid $batid is queuing.. checking.. "; list($count)=mysql_fetch_row(mysql_query("select count(*) from lm_sendq where bat = '$batid';")); $log .= "count=$count\n"; if($count>0){ if(!isset($data[$batid])){ // no existing data, record it $log .= "no existing data for batid $batid, recording:\n"; $log .= "out.=$batid:$count\\n\n"; $out.="$batid:$count\n"; } else { // check if count is the same as last time, if it is fix the queue if($count==$data[$batid]){ $log .= "count is same as last time, queuing stalled, running fix: "; $log .= "update lm_sendp set completed = '0' where batid = '$batid';\n"; mysql_query("update lm_sendp set completed = '0' where batid = '$batid';"); $echolog=true; } else { $log .= "count changed, still queuing, ignore.\n"; // if count not same, still queueing up or down or now sending, so ignore it and start again } } } } } else { $log .= "no messages are queuing\n"; }// End v1.88} else { // update for mysqli}// write out new dataif($out){ $log .= "writing out data:\n".nl2br($out)."\n"; file_put_contents('./queuefix.dat',trim($out));} elseif($fdata){ $log .= "clearing out data\n"; file_put_contents('./queuefix.dat','');}//file_put_contents('./queuefix.dat','test:test');if($echolog){ if(strstr($_SERVER['HTTP_USER_AGENT'],'Wget')===false) $log=nl2br($log); echo $log;}?>
That script should also answer you question about the command to use to get such a stuck queue going.
Regards