function get($id,$opts=array())
{
-
+
//print_r($opts);
if (!empty($opts['DB_DataObject-debug'])) {
DB_DataObject::debugLevel($opts['DB_DataObject-debug']);
if (!$w->get($id)) {
$this->errorHandler("invalid id\n");
}
- if (!$force && strtotime($w->act_when) < strtotime($w->sent)) {
+
+ if (!$force && !empty($w->sent) && strtotime($w->act_when) < strtotime($w->sent)) {
$this->errorHandler("send repeat to early\n");
."\n");
$this->errorHandler("message has been sent already.\n");
}
+ // 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)" );;
+ $ww = clone($w);
+ $w->sent = $w->sqlValue('NOW()'); // do not update if sent.....
+ $w->msgid = '';
+ $w->event_id = $ev->id;
+ $w->update($ww);
+ $this->errorHandler(date('Y-m-d h:i:s ') .
+ "Notification event cleared (user has to many failures)"
+ ."\n");
+ $this->errorHandler("user has to many failures.\n");
+ }
// let's work out the last notification sent to this user..
$l = DB_DataObject::factory($this->table);
'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};
+ }
}
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']) ?
+ $ev = $this->addEvent('NOTIFYFAIL', $w, isset($email['error']) ?
$email['error'] : "INTERNAL ERROR - We can not handle " . $w->ontable);
$ww = clone($w);
$w->sent = (!$w->sent || $w->sent == '0000-00-00 00:00:00') ? $w->sqlValue('NOW()') : $w->sent; // do not update if sent.....
$w->msgid = '';
$w->event_id = $ev->id;
+ $w->to_email = $p->email;
$w->update($ww);
$this->errorHandler(date('Y-m-d h:i:s ') .
(isset($email['error']) ?
if (isset($email['later'])) {
$old = clone($w);
$w->act_when = $email['later'];
+ $this->updateServer($w);
$w->update($old);
$this->errorHandler(date('Y-m-d h:i:s ') . " Delivery postponed by email creator to {$email['later']}");
}
require_once 'Validate.php';
if (!Validate::email($p->email, true)) {
- $ev = $this->addEvent('NOTIFY', $w, "INVALID ADDRESS: " . $p->email);
+ $ev = $this->addEvent('NOTIFYFAIL', $w, "INVALID ADDRESS: " . $p->email);
$ww = clone($w);
$w->sent = (!$w->sent || $w->sent == '0000-00-00 00:00:00') ? $w->sqlValue('NOW()') : $w->sent; // do not update if sent.....
$w->msgid = '';
$w->event_id = $ev->id;
+ $w->to_email = $p->email;
$w->update($ww);
$this->errorHandler(date('Y-m-d h:i:s ') . "INVALID ADDRESS: " . $p->email. "\n");
// 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) {
+ // 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'));
+ $this->updateServer($w);
$w->update($ww);
$this->errorHandler(date('Y-m-d h:i:s') . " - MX LOOKUP FAILED\n");
}
- $ev = $this->addEvent('NOTIFY', $w, "BAD ADDRESS - BAD DOMAIN - ". $p->email );
- $w->sent = (!$w->sent || $w->sent == '0000-00-00 00:00:00') ? $w->sqlValue('NOW()') : $w->sent; // do not update if sent.....
+ $ev = $this->addEvent('NOTIFYFAIL', $w, "BAD ADDRESS - BAD DOMAIN - ". $p->email );
+ $w->sent = $w->sqlValue('NOW()'); // why not updated - used to leave as is?
$w->msgid = '';
$w->event_id = $ev->id;
+ $w->to_email = $p->email;
$w->update($ww);
$this->errorHandler(date('Y-m-d h:i:s') . " - FAILED - BAD EMAIL - {$p->email} \n");
- if (!$force && strtotime($w->act_start) < strtotime('NOW - 14 DAY')) {
- $ev = $this->addEvent('NOTIFY', $w, "BAD ADDRESS - GIVE UP - ". $p->email );
- $w->sent = (!$w->sent || $w->sent == '0000-00-00 00:00:00') ? $w->sqlValue('NOW()') :$w->sent; // do not update if sent.....
+ if (!$force && strtotime($w->act_start) < strtotime('NOW - 3 DAY')) {
+ $ev = $this->addEvent('NOTIFYFAIL', $w, "BAD ADDRESS - GIVE UP - ". $p->email );
+ $w->sent = $w->sqlValue('NOW()');
$w->msgid = '';
$w->event_id = $ev->id;
+ $w->to_email = $p->email;
$w->update($ww);
$this->errorHandler(date('Y-m-d h:i:s') . " - FAILED - GAVE UP TO OLD - {$p->email} \n");
}
$w->to_email = $p->email;
//$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->update($ww);
$ww = clone($w);
));
$core_domain->insert();
}
+
+
+ $this->initHelo();
+
+ if (!isset($ff->Mail['helo'])) {
+ $this->errorHandler("config Mail[helo] is not set");
+ }
+
+
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(
$core_notify = DB_DataObject::factory($this->table);
$core_notify->domain_id = $core_domain->id;
$core_notify->whereAdd("
- sent >= NOW() - INTERVAL $seconds SECONDS
+ sent >= NOW() - INTERVAL $seconds SECOND
");
if($core_notify->count()){
$old = clone($w);
$w->act_when = date("Y-m-d H:i:s", time() + $seconds);
+ $this->updateServer($w);
$w->update($old);
$this->errorHandler(date('Y-m-d h:i:s ') . " Too many emails sent by {$dom}");
}
$mailer->host = $server;
- $mailer->auth = true;
- $mailer->username = $settings['username'];;
- $mailer->password = $settings['password'];
+ $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'];
- $mailer->port = $settings['port'];
+
}
//print_r($res);
$this->addEvent('NOTIFY', $w, 'GREYLISTED - ' . $errmsg);
$w->act_when = date('Y-m-d H:i:s', strtotime('NOW + ' . $retry . ' MINUTES'));
+ $this->updateServer($w);
$w->domain_id = $core_domain->id;
$w->update($ww);
$errmsg= $res->userinfo['smtpcode'] . ':' . $res->userinfo['smtptext'];
}
- $ev = $this->addEvent('NOTIFY', $w, ($fail ? "FAILED - " : "RETRY TIME EXCEEDED - ") .
+ $ev = $this->addEvent('NOTIFYFAIL', $w, ($fail ? "FAILED - " : "RETRY TIME EXCEEDED - ") .
$errmsg);
$w->sent = (!$w->sent || $w->sent == '0000-00-00 00:00:00') ? $w->sqlValue('NOW()') : $w->sent; // do not update if sent.....
$w->msgid = '';
// handle no host availalbe forever...
if (strtotime($w->act_start) < strtotime('NOW - 3 DAYS')) {
- $ev = $this->addEvent('NOTIFY', $w, "RETRY TIME EXCEEDED - ". $p->email);
+ $ev = $this->addEvent('NOTIFYFAIL', $w, "RETRY TIME EXCEEDED - ". $p->email);
$w->sent = (!$w->sent || $w->sent == '0000-00-00 00:00:00') ? $w->sqlValue('NOW()') : $w->sent; // do not update if sent.....
$w->msgid = '';
$w->event_id = $ev->id;
$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->act_when = date('Y-m-d H:i:s', strtotime('NOW + ' . $retry . ' MINUTES'));
+
+ $this->updateServer($w);
+
$w->domain_id = $core_domain->id;
$w->update($ww);
$this->errorHandler(date('Y-m-d h:i:s') ." - NO HOST AVAILABLE\n");
{
$this->debug_str .= strlen($this->debug_str) ? "\n" : '';
$this->debug_str .= $message;
+ //echo $message ."\n";
}
function errorHandler($msg, $success = false)
}
+
+ function updateServer($w)
+ {
+ $ff = HTML_FlexyFramework::get();
+
+ if (empty($ff->Core_Notify['servers'])) {
+ return;
+ }
+ // next server..
+ $w->server_id = ($w->server_id + 1) % count(array_keys($ff->Core_Notify['servers']));
+
+ }
+
+ function initHelo()
+ {
+ $ff = HTML_FlexyFramework::get();
+ if (empty($ff->Core_Notify['servers'])) {
+ return;
+ }
+ if (!isset($ff->Core_Notify['servers'][gethostname()]) || !isset($ff->Core_Notify['servers'][gethostname()]['helo']) ) {
+ $this->jerr("Core_Notify['servers']['" . gethostname() . "']['helo'] not set");
+ }
+ $ff->Mail['helo'] = $ff->Core_Notify['servers'][gethostname()]['helo'];
+
+ }
+
}
\ No newline at end of file