X-Git-Url: http://git.roojs.org/?p=Pman.Core;a=blobdiff_plain;f=NotifySend.php;h=caa6ec4e5a125b6dbe906b24cf6bc901dfce026c;hp=e7fa445b1af7b13c6999195787b744af860b792e;hb=HEAD;hpb=1b4b4b94edb973e595579c11b131fbcd338c4d75 diff --git a/NotifySend.php b/NotifySend.php index e7fa445b..f94ff33d 100644 --- a/NotifySend.php +++ b/NotifySend.php @@ -87,7 +87,9 @@ class Pman_Core_NotifySend extends Pman function get($id,$opts=array()) { - + //if ($this->database_is_locked()) { + // die("LATER - DATABASE IS LOCKED"); + // } //print_r($opts); if (!empty($opts['DB_DataObject-debug'])) { DB_DataObject::debugLevel($opts['DB_DataObject-debug']); @@ -109,8 +111,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); @@ -121,17 +126,30 @@ class Pman_Core_NotifySend extends Pman HTML_FlexyFramework::get()->Core_Mailer['debug'] = true; } - $sent = (empty($w->sent) || preg_match('/^0000/', $w->sent)) ? false : true; + $sent = (empty($w->sent) || strtotime( $w->sent) < 100 ) ? false : true; if (!$force && (!empty($w->msgid) || $sent)) { $ww = clone($w); if (!$sent) { // fix sent. - $w->sent = $w->sent == '0000-00-00 00:00:00' ? $w->sqlValue('NOW()') :$w->sent; // do not update if sent..... + $w->sent = strtotime( $w->sent) < 100 ? $w->sqlValue('NOW()') :$w->sent; // do not update if sent..... $w->update($ww); } $this->errorHandler("message has been sent already.\n"); } + // we have a bug with msgid not getting filled. + $cev = DB_DataObject::Factory('Events'); + $cev->on_table = $this->table; + $cev->on_id = $w->id; + $cev->whereAdd("action IN ('NOTIFYSENT', 'NOTIFYFAIL')"); + $cev->limit(1); + if ($cev->count()) { + $cev->find(true); + $w->flagDone($cev, $cev->action == 'NOTIFYSENT' ? 'alreadysent' : ''); + $this->errorHandler( $cev->action . " (fix old) ". $cev->remarks); + } + + $o = $w->object(); if ($o === false) { @@ -226,7 +244,7 @@ class Pman_Core_NotifySend extends Pman if (isset($email['later'])) { - + $this->server->updateNotifyToNextServer($w, $email['later'],true); $this->errorHandler("Delivery postponed by email creator to {$email['later']}"); @@ -330,11 +348,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); @@ -350,7 +369,8 @@ class Pman_Core_NotifySend extends Pman $this->errorHandler("config Mail[helo] is not set"); } - + $email = DB_DataObject::factory('core_notify_sender')->filterEmail($email, $w); + foreach($mxs as $mx) { @@ -426,6 +446,8 @@ class Pman_Core_NotifySend extends Pman } + + $res = $mailer->send($p->email, $email['headers'], $email['body']); if (is_object($res)) { @@ -442,7 +464,7 @@ class Pman_Core_NotifySend extends Pman $ev->writeEventLog($this->debug_str); - $w->flagDone($ev,$email['headers']['Message-Id']); + $w->flagDone($ev, $email['headers']['Message-Id']); // enable cc in notify.. @@ -470,7 +492,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) { @@ -489,7 +511,7 @@ class Pman_Core_NotifySend extends Pman //print_r($res); $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); } @@ -518,14 +540,21 @@ class Pman_Core_NotifySend extends Pman $errmsg= $res->userinfo['smtpcode'] . ':' . $res->userinfo['smtptext']; } + if ( $res->userinfo['smtpcode']> 500 ) { + + DB_DataObject::factory('core_notify_sender')->checkSmtpResponse($email, $w, $errmsg); + + + 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, ''); - - if ($res->userinfo['smtpcode'] == 550) { - $this->server->checkSmtpResponse($errmsg, $core_domain); - } - - + $this->errorHandler( $ev->remarks); } @@ -534,9 +563,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);