From 3f7f27c278f18357fcb226cb321e337af456b225 Mon Sep 17 00:00:00 2001 From: Alan Date: Thu, 2 Nov 2023 16:02:03 +0800 Subject: [PATCH] sync --- DataObjects/Core_notify_sender.php | 124 +++++++++++++++++++++++++++++ sql/core_notify_sender.sql | 10 +++ 2 files changed, 134 insertions(+) create mode 100644 DataObjects/Core_notify_sender.php create mode 100644 sql/core_notify_sender.sql diff --git a/DataObjects/Core_notify_sender.php b/DataObjects/Core_notify_sender.php new file mode 100644 index 00000000..e40e45ba --- /dev/null +++ b/DataObjects/Core_notify_sender.php @@ -0,0 +1,124 @@ +parseAddressList( $email['headers']['From'], 'localhost', false); + if (is_a($addresses, 'PEAR_Error')) { + return false; + } + $from_addr = $addresses[0]; + //print_r($email['headers']['From']); print_R($from_addr);exit; + + $from = $from_addr->mailbox . '@' . $from_addr->host; + + $ns = DB_DataObject::Factory($this->tableName()); + $ns->setFrom(array( + 'email' => $from, + 'poolname' => $notify->tableName() + )); + if (!$ns->find(true)) { + $ns->is_active = 1; + $ns->priority = 1; + $ns->insert(); + return false; + } + return $ns; + } + + + function filterEmail($email, $notify) + { + // + if (empty($email['headers']['From']) || empty($notify)) { + return $email; + } + $bits = explode('@', $notify->to_email); + $to_dom = DB_DataObject::factory('core_domain')->loadOrCreate($bits[1]); + + + $ns = $this->emailToSender($email, $notify); + if ($ns == false) { + return $email; + } + // is it blacklisted? + $bl = DB_DAtaObject::Factory('core_notify_sender_blacklist'); + $bl->setFrom(array( + 'sender_id'=> $ns->id, + 'domain_id' => $to_dom->id + )); + if (!$bl->count()) { + return $email; + } + // it's blacklisted.. + // try finding alternative. + $bl = DB_DAtaObject::Factory('core_notify_sender_blacklist'); + $bl->domain_id = $to_dom->id; + $bad_ids = $bl->fetchAll('sender_id'); + + $ns = DB_DataObject::Factory($this->tableName()); + $ns->setFrom(array( + 'email' => $from, + 'is_active' => 1, + )); + $ns->whereAddIn('!id', $bad_ids, 'int'); + if (!$ns->count()){ + return $email; // no alternative available + } + $ns->limit(1); + $ns->find(true); + $mail['headers']['From'] = $from_addr->personal . ' <' . $ns->email .'>'; + + return $mail; + + //check blacklist for + + + + } + + function checkSmtpResponse($email, $notify, $errmsg) + { + $bl = DB_DataObject::factory('core_notify_sender_blacklist'); + if (!$bl->messageIsBlacklisted($errmsg)) { + return; // ok. + } + // create a record. + + $bits = explode('@', $notify->to_email); + $to_dom = DB_DataObject::factory('core_domain')->loadOrCreate($bits[1]); + + $ns = $this->emailToSender($email); + $bl->setFrom(array( + 'sender_id' => $ns->id, + 'domain_id' => $to_dom->id, + )); + if ($bl->count()) { + return; + } + $bl->error_msg = $errmsg; + $bl->added_dt = $bl->sqlValue('NOW()'); + $bl->insert(); + + } + +} \ No newline at end of file diff --git a/sql/core_notify_sender.sql b/sql/core_notify_sender.sql new file mode 100644 index 00000000..4d84c452 --- /dev/null +++ b/sql/core_notify_sender.sql @@ -0,0 +1,10 @@ +CREATE TABLE core_notify_sender ( + id INT(11) NOT NULL AUTO_INCREMENT , + email VARCHAR(254) NOT NULL DEFAULT '', + is_active INT(4) NOT NULL DEFAULT 0, + poolname VARCHAR(128) NOT NULL DEFAULT '', + priority INT NOT NULL DEFAULT 0, + PRIMARY KEY (id) +) ENGINE=InnoDB;; + +ALTER TABLE core_notify_sender ADD INDEX lookup (email,poolname,is_active); -- 2.39.2