X-Git-Url: http://git.roojs.org/?p=Pman.Core;a=blobdiff_plain;f=NotifySend.php;h=caa6ec4e5a125b6dbe906b24cf6bc901dfce026c;hp=78a59137a24bdace0846ab654d31b9bfc0ae5b57;hb=HEAD;hpb=36e54c54397e7afe0b4f1ecdf6eea7d58f3a74fa diff --git a/NotifySend.php b/NotifySend.php index 78a59137..f94ff33d 100644 --- a/NotifySend.php +++ b/NotifySend.php @@ -26,6 +26,8 @@ require_once 'Pman.php'; * Mail[helo] << helo host name * Mail[socket_options] << any socket option. */ +class Pman_Core_NotifySend_Exception_Success extends Exception {} +class Pman_Core_NotifySend_Exception_Fail extends Exception {} class Pman_Core_NotifySend extends Pman @@ -69,6 +71,8 @@ class Pman_Core_NotifySend extends Pman ); var $table = 'core_notify'; var $error_handler = 'die'; + var $poolname = 'core'; + var $server; // core_notify_server function getAuth() { @@ -81,9 +85,11 @@ class Pman_Core_NotifySend extends Pman } - function get($id,$opts) + 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']); @@ -95,15 +101,22 @@ class Pman_Core_NotifySend extends Pman $force = empty($opts['force']) ? 0 : 1; $w = DB_DataObject::factory($this->table); - + if (!$w->get($id)) { $this->errorHandler("invalid id\n"); } - if (!$force && strtotime($w->act_when) < strtotime($w->sent)) { - - - $this->errorHandler("send repeat to early\n"); + + if (!$force && !empty($w->sent) && strtotime($w->act_when) < strtotime($w->sent)) { + + $this->errorHandler("already sent - repeat to early\n"); + } + + $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); $ff = HTML_FlexyFramework::get(); @@ -113,31 +126,37 @@ 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) { - $w->sent = $w->sqlValue("NOW()"); + if (!$sent) { // fix 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) { - - $ev = $this->addEvent('NOTIFY', $w, - "Notification event cleared (underlying object does not exist)" );; - $ww = clone($w); - $w->sent = date('Y-m-d H:i:s'); - $w->msgid = ''; - $w->event_id = $ev->id; - $w->update($ww); - $this->errorHandler(date('Y-m-d h:i:s ') . - "Notification event cleared (underlying object does not exist)" - ."\n"); + + $ev = $this->addEvent('NOTIFY', $w, "Notification event cleared (underlying object does not exist)" ); + $w->flagDone($ev, ''); + $this->errorHandler( $ev->remarks); } @@ -145,19 +164,17 @@ class Pman_Core_NotifySend extends Pman $p = $w->person(); if (isset($p->active) && empty($p->active)) { - $ev = $this->addEvent('NOTIFY', $w, - "Notification event cleared (not user not active any more)" );; - $ww = clone($w); - $w->sent = date('Y-m-d H:i:s'); - $w->msgid = ''; - $w->event_id = $ev->id; - $w->update($ww); - $this->errorHandler(date('Y-m-d h:i:s ') . - "Notification event cleared (not user not active any more)" - ."\n"); - $this->errorHandler("message has been sent already.\n"); + $ev = $this->addEvent('NOTIFY', $w, "Notification event cleared (not user not active any more)" );; + $w->flagDone($ev, ''); + $this->errorHandler( $ev->remarks); } + // has it failed mutliple times.. + if (!empty($w->field) && isset($p->{$w->field .'_fails'}) && $p->{$w->field .'_fails'} > 9) { + $ev = $this->addEvent('NOTIFY', $w, "Notification event cleared (user has to many failures)" );; + $w->flagDone($ev, ''); + $this->errorHandler( $ev->remarks); + } // let's work out the last notification sent to this user.. $l = DB_DataObject::factory($this->table); @@ -167,9 +184,11 @@ class Pman_Core_NotifySend extends Pman 'onid' => $w->onid, ); // only newer version of the database us this.. - $personid_col = strtolower($w->person_table).'_id'; - if (isset($w->{$personid_col})) { - $lar[$personid_col] = $w->{$personid_col}; + if (isset($w->person_table)) { + $personid_col = strtolower($w->person_table).'_id'; + if (isset($w->{$personid_col})) { + $lar[$personid_col] = $w->{$personid_col}; + } } @@ -198,17 +217,9 @@ class Pman_Core_NotifySend extends Pman $email = $this->makeEmail($o, $p, $last, $w, $force); if ($email === true) { - - $ev = $this->addEvent('NOTIFY', $w, - "Notification event cleared (not required any more)" );; - $ww = clone($w); - $w->sent = date('Y-m-d H:i:s'); - $w->msgid = ''; - $w->event_id = $ev->id; - $w->update($ww); - $this->errorHandler(date('Y-m-d h:i:s ') . - "Notification event cleared (not required any more)" - ."\n"); + $ev = $this->addEvent('NOTIFY', $w, "Notification event cleared (not required any more) - toEmail=true" );; + $w->flagDone($ev, ''); + $this->errorHandler( $ev->remarks); } if (is_a($email, 'PEAR_Error')) { $email =array( @@ -225,25 +236,18 @@ class Pman_Core_NotifySend extends Pman if ($email === false || isset($email['error']) || empty($p)) { // object returned 'false' - it does not know how to send it.. - $ev = $this->addEvent('NOTIFY', $w, isset($email['error']) ? - $email['error'] : "INTERNAL ERROR - We can not handle " . $w->ontable); - $ww = clone($w); - $w->sent = date('Y-m-d H:i:s'); - $w->msgid = ''; - $w->event_id = $ev->id; - $w->update($ww); - $this->errorHandler(date('Y-m-d h:i:s ') . - (isset($email['error']) ? - $email['error'] : "INTERNAL ERROR - We can not handle " . $w->ontable) - ."\n"); + $ev = $this->addEvent('NOTIFYFAIL', $w, isset($email['error']) ? $email['error'] : "INTERNAL ERROR - We can not handle " . $w->ontable); + $w->flagDone($ev, ''); + $this->errorHandler( $ev->remarks); } + if (isset($email['later'])) { - $old = clone($w); - $w->act_when = $email['later']; - $w->update($old); - $this->errorHandler(date('Y-m-d h:i:s ') . " Delivery postponed by email creator to {$email['later']}"); + + $this->server->updateNotifyToNextServer($w, $email['later'],true); + + $this->errorHandler("Delivery postponed by email creator to {$email['later']}"); } @@ -270,26 +274,33 @@ class Pman_Core_NotifySend extends Pman // since some of them have spaces?!?! $p->email = trim($p->email); + $ww = clone($w); + $ww->to_email = empty($ww->to_email) ? $p->email : $ww->to_email; + $explode_email = explode('@', $ww->to_email); + $dom = array_pop($explode_email); + + $core_domain = DB_DataObject::factory('core_domain')->loadOrCreate($dom); + + + $ww->domain_id = $core_domain->id; + // if to_email has not been set!? + $ww->update($w); // if nothing has changed this will not do anything. + $w = clone($ww); + require_once 'Validate.php'; if (!Validate::email($p->email, true)) { - $ev = $this->addEvent('NOTIFY', $w, "INVALID ADDRESS: " . $p->email); - $ww = clone($w); - $w->sent = date('Y-m-d H:i:s'); - $w->msgid = ''; - $w->event_id = $ev->id; - $w->update($ww); - $this->errorHandler(date('Y-m-d h:i:s ') . "INVALID ADDRESS: " . $p->email. "\n"); + $ev = $this->addEvent('NOTIFYFAIL', $w, "INVALID ADDRESS: " . $p->email); + $w->flagDone($ev, ''); + $this->errorHandler($ev->remarks); } $ff = HTML_FlexyFramework::get(); - - $dom = array_pop(explode('@', $p->email)); - + $mxs = $this->mxs($dom); $ww = clone($w); @@ -297,37 +308,33 @@ class Pman_Core_NotifySend extends Pman // need to handle temporary failure.. - // we try for 3 days.. - $retry = 5; + // we try for 2 days.. + $retry = 15; if (strtotime($w->act_start) < strtotime('NOW - 1 HOUR')) { // older that 1 hour. - $retry = 15; + $retry = 60; } if (strtotime($w->act_start) < strtotime('NOW - 1 DAY')) { // older that 1 day. - $retry = 60; + $retry = 120; } if (strtotime($w->act_start) < strtotime('NOW - 2 DAY')) { // older that 1 day. - $retry = 120; + $retry = 240; } - if ($mxs === false) { - // only retry for 2 day son the MX issue.. - if ($retry < 120) { + if (empty($mxs)) { + // only retry for 1 day if the MX issue.. + if ($retry < 240) { $this->addEvent('NOTIFY', $w, 'MX LOOKUP FAILED ' . $dom ); - $w->act_when = date('Y-m-d H:i:s', strtotime('NOW + ' . $retry . ' MINUTES')); - $w->update($ww); - $this->errorHandler(date('Y-m-d h:i:s') . " - MX LOOKUP FAILED\n"); + $w->flagLater(date('Y-m-d H:i:s', strtotime('NOW + ' . $retry . ' MINUTES'))); + $this->errorHandler($ev->remarks); } - $ev = $this->addEvent('NOTIFY', $w, "BAD ADDRESS - BAD DOMAIN - ". $p->email ); - $w->sent = date('Y-m-d H:i:s'); - $w->msgid = ''; - $w->event_id = $ev->id; - $w->update($ww); - $this->errorHandler(date('Y-m-d h:i:s') . " - FAILED - BAD EMAIL - {$p->email} \n"); + $ev = $this->addEvent('NOTIFYFAIL', $w, "BAD ADDRESS - BAD DOMAIN - ". $p->email ); + $w->flagDone($ev, ''); + $this->errorHandler($ev->remarks); } @@ -335,20 +342,19 @@ class Pman_Core_NotifySend extends Pman - if (!$force && strtotime($w->act_start) < strtotime('NOW - 14 DAY')) { - $ev = $this->addEvent('NOTIFY', $w, "BAD ADDRESS - GIVE UP - ". $p->email ); - $w->sent = date('Y-m-d H:i:s'); - $w->msgid = ''; - $w->event_id = $ev->id; - $w->update($ww); - $this->errorHandler(date('Y-m-d h:i:s') . " - FAILED - GAVE UP TO OLD - {$p->email} \n"); + if (!$force && strtotime($w->act_start) < strtotime('NOW - 3 DAY')) { + $ev = $this->addEvent('NOTIFYFAIL', $w, "BAD ADDRESS - GIVE UP - ". $p->email ); + $w->flagDone($ev, ''); + $this->errorHandler( $ev->remarks); } + $retry_when = date('Y-m-d H:i:s', strtotime('NOW + ' . $retry . ' MINUTES')); - - $w->to_email = $p->email; //$this->addEvent('NOTIFY', $w, 'GREYLISTED ' . $p->email . ' ' . $res->toString()); - $w->act_when = date('Y-m-d H:i:s', strtotime('NOW + ' . $retry . ' MINUTES')); + // 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') ? $retry_when : $w->act_when; + $w->update($ww); $ww = clone($w); @@ -356,20 +362,19 @@ class Pman_Core_NotifySend extends Pman $fail = false; require_once 'Mail.php'; - $core_domain = DB_DataObject::factory('core_domain'); - if(!$core_domain->get('domain', $dom)){ - $core_domain = DB_DataObject::factory('core_domain'); - $core_domain->setFrom(array( - 'domain' => $dom - )); - $core_domain->insert(); + + $this->server->initHelo(); + + if (!isset($ff->Mail['helo'])) { + $this->errorHandler("config Mail[helo] is not set"); } + + $email = DB_DataObject::factory('core_notify_sender')->filterEmail($email, $w); + foreach($mxs as $mx) { - if (!isset($ff->Mail['helo'])) { - $this->errorHandler("config Mail[helo] is not set"); - } + $this->debug_str = ''; $this->debug("Trying SMTP: $mx / HELO {$ff->Mail['helo']}"); $mailer = Mail::factory('smtp', array( @@ -380,119 +385,114 @@ class Pman_Core_NotifySend extends Pman //'debug' => isset($opts['debug']) ? 1 : 0, 'debug' => 1, 'debug_handler' => array($this, 'debugHandler') - )); + )); // if the host is the mail host + it's authenticated add auth details // this normally will happen if you sent Pman_Core_NotifySend['host'] + + if (isset($ff->Mail['host']) && $ff->Mail['host'] == $mx && !empty($ff->Mail['auth'] )) { - $username = $ff->Mail['username'] ; - $password = $ff->Mail['password'] ; + $mailer->auth = true; + $mailer->username = $ff->Mail['username']; + $mailer->password = $ff->Mail['password']; + } + + if(!empty($ff->Core_Notify) && !empty($ff->Core_Notify['routes'])){ - if(!empty($ff->Core_Notify) && !empty($ff->Core_Notify['routes'])){ + // we might want to regex 'office365 as a mx host + foreach ($ff->Core_Notify['routes'] as $server => $settings){ + if(!in_array($dom, $settings['domains'])){ + continue; + } - foreach ($ff->Core_Notify['routes'] as $server => $settings){ - if(!in_array($dom, $settings['domains'])){ - continue; - } - - // what's the minimum timespan.. - if we have 60/hour.. that's 1 every minute. - // if it's newer that '1' minute... - // then shunt it.. - - $seconds = floor((60 * 60) / $settings['rate']); - - $core_notify = DB_DataObject::factory($this->table); - $core_notify->domain_id = $core_domain->id; - $core_notify->whereAdd(" - sent >= NOW() - INTERVAL $seconds SECONDS - "); - - if($core_notify->count()){ - $old = clone($w); - $w->act_when = date("Y-m-d H:i:s", time() + $seconds); - $w->update($old); - $this->errorHandler(date('Y-m-d h:i:s ') . " Too many emails sent by {$dom}"); - } - - // that make's this test obsolete... - /* - - $core_notify = DB_DataObject::factory($this->table); - $core_notify->domain_id = $core_domain->id; - $core_notify->whereAdd(" - sent >= NOW() - INTERVAL 1 HOUR - "); - - if($core_notify->count() >= $settings['rate']){ - $old = clone($w); - $w->act_when = date("Y-m-d H:i:s", strtotime('+1 HOUR')); - $w->update($old); - $this->errorHandler(date('Y-m-d h:i:s ') . " Too many emails sent by {$dom}"); - } - */ - - - - $mailer->host = $server; - $username = $settings['username']; - $password = $settings['password']; + // what's the minimum timespan.. - if we have 60/hour.. that's 1 every minute. + // if it's newer that '1' minute... + // then shunt it.. + + $settings['rate'] = isset( $settings['rate']) ? $settings['rate'] : 360; + + $seconds = floor((60 * 60) / $settings['rate']); + + $core_notify = DB_DataObject::factory($this->table); + $core_notify->domain_id = $core_domain->id; + $core_notify->server_id = $this->server->id; + $core_notify->whereAdd(" + sent >= NOW() - INTERVAL $seconds SECOND + "); + + if($core_notify->count()){ + $this->server->updateNotifyToNextServer( $w , date("Y-m-d H:i:s", time() + $seconds), true); + $this->errorHandler( " Too many emails sent by {$dom} - requeing"); + } + + + + $mailer->host = $server; + $mailer->auth = isset($settings['auth']) ? $settings['auth'] : true; + $mailer->username = $settings['username']; + $mailer->password = $settings['password']; + if (isset($settings['port'])) { + $mailer->port = $settings['port']; + } + if (isset($settings['socket_options'])) { + $mailer->socket_options = $settings['socket_options']; - break; } + + break; } - $mailer->auth = true; - $mailer->username = $username; - $mailer->password = $password; } + + + $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) { // success.... - $ev = $this->addEvent('NOTIFYSENT', $w, "{$w->to_email} - {$email['headers']['Subject']}"); + $successEventName = (empty($email['successEventName'])) ? 'NOTIFYSENT' : $email['successEventName']; - $ev->writeEventLog($this->debug_str); + $ev = $this->addEvent($successEventName, $w, "{$w->to_email} - {$email['headers']['Subject']}"); - $w->sent = date('Y-m-d H:i:s'); - $w->msgid = $email['headers']['Message-Id']; - $w->event_id = $ev->id; // sent ok.. - no need to record it.. - $w->domain_id = $core_domain->id; - $w->update($ww); + $ev->writeEventLog($this->debug_str); + + $w->flagDone($ev, $email['headers']['Message-Id']); + // enable cc in notify.. if (!empty($email['headers']['Cc'])) { $cmailer = Mail::factory('smtp', isset($ff->Mail) ? $ff->Mail : array() ); $email['headers']['Subject'] = "(CC): " . $email['headers']['Subject']; - $cmailer->send($email['headers']['Cc'], - $email['headers'], $email['body']); + $cmailer->send($email['headers']['Cc'], $email['headers'], $email['body']); } if (!empty($email['bcc'])) { $cmailer = Mail::factory('smtp', isset($ff->Mail) ? $ff->Mail : array() ); $email['headers']['Subject'] = "(CC): " . $email['headers']['Subject']; - $res = $cmailer->send($email['bcc'], - $email['headers'], $email['body']); + $res = $cmailer->send($email['bcc'], $email['headers'], $email['body']); if (!$res || is_a($res, 'PEAR_Error')) { echo "could not send bcc..\n"; } else { echo "Sent BCC to {$email['bcc']}\n"; } } - - - $this->errorHandler(date('Y-m-d h:i:s') . " - SENT {$w->id} - {$w->to_email} \n"); + + $this->errorHandler( " SENT {$w->id} - {$ev->remarks}", true); } // what type of error.. $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) { @@ -509,51 +509,67 @@ class Pman_Core_NotifySend extends Pman $errmsg= $res->userinfo['smtpcode'] . ':' . $res->userinfo['smtptext']; } //print_r($res); - $this->addEvent('NOTIFY', $w, 'GREYLISTED - ' . $errmsg); - $w->act_when = date('Y-m-d H:i:s', strtotime('NOW + ' . $retry . ' MINUTES')); - $w->domain_id = $core_domain->id; - $w->update($ww); + $ev = $this->addEvent('NOTIFY', $w, 'GREYLISTED - ' . $errmsg); + $this->server->updateNotifyToNextServer($w, $retry_when,true); - $this->errorHandler(date('Y-m-d h:i:s') . " - GREYLISTED - $errmsg \n"); + $this->errorHandler( $ev->remarks); } + $fail = true; break; } - if ($fail || $next_try_min > (2*24*60)) { + + // after trying all mxs - could not connect... + if (!$fail && ($next_try_min > (2*24*60) || strtotime($w->act_start) < strtotime('NOW - 3 DAYS'))) { + + $errmsg= " - UNKNOWN ERROR"; + if (isset($res->userinfo['smtptext'])) { + $errmsg= $res->userinfo['smtpcode'] . ':' . $res->userinfo['smtptext']; + } + + $ev = $this->addEvent('NOTIFYFAIL', $w, "RETRY TIME EXCEEDED - " . $errmsg); + $w->flagDone($ev, ''); + $this->errorHandler( $ev->remarks); + } + + if ($fail) { //// !!!!<<< BLACKLIST DETECT? // fail.. = log and give up.. - $errmsg= $fail ? ($res->userinfo['smtpcode'] . ': ' .$res->toString()) : " - UNKNOWN ERROR"; + $errmsg= $res->userinfo['smtpcode'] . ': ' .$res->toString(); if (isset($res->userinfo['smtptext'])) { $errmsg= $res->userinfo['smtpcode'] . ':' . $res->userinfo['smtptext']; } - $ev = $this->addEvent('NOTIFY', $w, ($fail ? "FAILED - " : "RETRY TIME EXCEEDED - ") . - $errmsg); - $w->sent = date('Y-m-d H:i:s'); - $w->msgid = ''; - $w->event_id = $ev->id; - $w->domain_id = $core_domain->id; - $w->update($ww); - $this->errorHandler(date('Y-m-d h:i:s') . ' - FAILED - '. ($fail ? $res->toString() : "RETRY TIME EXCEEDED\n")); - } - - // handle no host availalbe forever... - if (strtotime($w->act_start) < strtotime('NOW - 3 DAYS')) { - $ev = $this->addEvent('NOTIFY', $w, "RETRY TIME EXCEEDED - ". $p->email); - $w->sent = date('Y-m-d H:i:s'); - $w->msgid = ''; - $w->event_id = $ev->id; - $w->domain_id = $core_domain->id; - $w->update($ww); - $this->errorHandler(date('Y-m-d h:i:s') . " - FAILED - RETRY TIME EXCEEDED\n"); - } - - - $this->addEvent('NOTIFY', $w, 'NO HOST CAN BE CONTACTED:' . $p->email); - $w->act_when = date('Y-m-d H:i:s', strtotime('NOW + 5 MINUTES')); - $w->domain_id = $core_domain->id; - $w->update($ww); - $this->errorHandler(date('Y-m-d h:i:s') ." - NO HOST AVAILABLE\n"); + 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, ''); + + $this->errorHandler( $ev->remarks); + } + + // at this point we just could not find any MX records.. + + + // try again. + + $ev = $this->addEvent('NOTIFY', $w, 'GREYLIST - NO HOST CAN BE CONTACTED:' . $p->email); + + $this->server->updateNotifyToNextServer($w, $retry_when ,true); + + + + $this->errorHandler($ev->remarks); } @@ -577,9 +593,11 @@ class Pman_Core_NotifySend extends Pman asort($mx_weight,SORT_NUMERIC); foreach($mx_weight as $k => $weight) { - $mxs[] = $mx_records[$k]; + if (!empty($mx_records[$k])) { + $mxs[] = $mx_records[$k]; + } } - return $mxs; + return empty($mxs) ? false : $mxs; } /** @@ -612,13 +630,22 @@ class Pman_Core_NotifySend extends Pman echo "calling :" . get_class($object) . '::' .$m . "\n"; return $object->$m($rcpt, $last_sent_date, $notify, $force); } - - if (!method_exists($object, 'toEmail')) { + // fallback if evtype is empty.. + + if (method_exists($object, 'toMailerData')) { + return $object->toMailerData(array( + 'rcpts'=>$rcpt, + 'person'=>$rcpt, // added as mediaoutreach used this? + )); //this is core_email - i think it's only used for testing... //var_Dump($object); //exit; } + if (method_exists($object, 'toEmail')) { + return $object->toEmail($rcpt, $last_sent_date, $notify, $force); + } + // no way to send this.. - this needs to handle core_notify how we have used it for the approval stuff.. - return $object->toEmail($rcpt, $last_sent_date, $notify, $force); + return false; } function debug($str) @@ -639,16 +666,40 @@ class Pman_Core_NotifySend extends Pman { $this->debug_str .= strlen($this->debug_str) ? "\n" : ''; $this->debug_str .= $message; + //echo $message ."\n"; } - function errorHandler($msg) + function errorHandler($msg, $success = false) { if($this->error_handler == 'exception'){ - throw new Exception($msg); + if($success){ + throw new Pman_Core_NotifySend_Exception_Success($msg); + } + + throw new Pman_Core_NotifySend_Exception_Fail($msg); } - die($msg); + die(date('Y-m-d h:i:s') . ' ' . $msg ."\n"); } + + function updateServer($w) + { + $ff = HTML_FlexyFramework::get(); + + if (empty($ff->Core_Notify['servers'])) { + return; + } + // some classes dont support server routing + if (!property_exists($w, 'server_id')) { + return; + } + // next server.. + $w->server_id = ($w->server_id + 1) % count(array_keys($ff->Core_Notify['servers'])); + + } + + + } \ No newline at end of file