fix retry time
[Pman.Core] / NotifySend.php
index 3d3fece..34318c0 100644 (file)
@@ -109,8 +109,11 @@ class Pman_Core_NotifySend extends Pman
             $this->errorHandler("already sent - repeat to early\n");
         }
         
-        $this->server = DB_DataObject::Factory('core_notify_server')->getCurrent($this);
-
+        $this->server = DB_DataObject::Factory('core_notify_server')->getCurrent($this, $force);
+        if (!$force &&  $w->server_id != $this->server->id) {
+            $this->errorHandler("Server id does not match - use force to try again\n");
+        }
+        
         
         if (!empty($opts['debug'])) {
             print_r($w);
@@ -330,11 +333,12 @@ class Pman_Core_NotifySend extends Pman
             $this->errorHandler(  $ev->remarks);
         }
         
+        $retry_when = date('Y-m-d H:i:s', strtotime('NOW + ' . $retry . ' MINUTES'));
         
         //$this->addEvent('NOTIFY', $w, 'GREYLISTED ' . $p->email . ' ' . $res->toString());
         // we can only update act_when if it has not been sent already (only happens when running in force mode..)
         // set act when if it's empty...
-        $w->act_when =  (!$w->act_when || $w->act_when == '0000-00-00 00:00:00') ? date('Y-m-d H:i:s', strtotime('NOW + ' . $retry . ' MINUTES')) : $w->act_when;
+        $w->act_when =  (!$w->act_when || $w->act_when == '0000-00-00 00:00:00') ? $retry_when : $w->act_when;
         
         $w->update($ww);
         
@@ -428,6 +432,9 @@ class Pman_Core_NotifySend extends Pman
         
             
             $res = $mailer->send($p->email, $email['headers'], $email['body']);
+            if (is_object($res)) {
+                $res->backtrace = array(); 
+            }
             $this->debug("GOT response to send: ". print_r($res,true)); 
             
             if ($res === true) {
@@ -467,7 +474,7 @@ class Pman_Core_NotifySend extends Pman
             $code = empty($res->userinfo['smtpcode']) ? -1 : $res->userinfo['smtpcode'];
             if (!empty($res->code) && $res->code == 10001) {
                 // fake greylist if timed out.
-                $code = 421;
+                $code = -1; 
             }
             
             if ($code < 0) {
@@ -484,9 +491,9 @@ class Pman_Core_NotifySend extends Pman
                     $errmsg=  $res->userinfo['smtpcode'] . ':' . $res->userinfo['smtptext'];
                 }
                 //print_r($res);
-                $this->addEvent('NOTIFY', $w, 'GREYLISTED - ' . $errmsg);
+                $ev = $this->addEvent('NOTIFY', $w, 'GREYLISTED - ' . $errmsg);
                 
-                $this->server->updateNotifyToNextServer($w,  strtotime('NOW + ' . $retry . ' MINUTES'),true);
+                $this->server->updateNotifyToNextServer($w,  $retry_when,true);
                 
                 $this->errorHandler(  $ev->remarks);
             }
@@ -515,14 +522,17 @@ class Pman_Core_NotifySend extends Pman
                 $errmsg=  $res->userinfo['smtpcode'] . ':' . $res->userinfo['smtptext'];
             }
             
-            $ev = $this->addEvent('NOTIFYFAIL', $w, ($fail ? "FAILED - " : "RETRY TIME EXCEEDED - ") .  $errmsg);
-            $w->flagDone($ev, '');
-            
             if ($res->userinfo['smtpcode'] == 550) {
-                $this->server->checkSmtpResponse($errmsg, $core_domain);
+                if ($this->server->checkSmtpResponse($errmsg, $core_domain)) {
+                    $ev = $this->addEvent('NOTIFY', $w, 'BLACKLISTED  - ' . $errmsg);
+                    $this->server->updateNotifyToNextServer($w,  $retry_when,true);
+                    $this->errorHandler( $ev->remarks);
+                }
             }
-            
-
+             
+            $ev = $this->addEvent('NOTIFYFAIL', $w, ($fail ? "FAILED - " : "RETRY TIME EXCEEDED - ") .  $errmsg);
+            $w->flagDone($ev, '');
+             
             $this->errorHandler( $ev->remarks);
         }
         
@@ -531,9 +541,9 @@ class Pman_Core_NotifySend extends Pman
         
         // try again.
         
-        $ev = $this->addEvent('NOTIFY', $w, 'NO HOST CAN BE CONTACTED:' . $p->email);
+        $ev = $this->addEvent('NOTIFY', $w, 'GREYLIST - NO HOST CAN BE CONTACTED:' . $p->email);
         
-        $this->server->updateNotifyToNextServer($w,  strtotime('NOW + ' . $retry . ' MINUTES'),true);
+        $this->server->updateNotifyToNextServer($w,  $retry_when ,true);