e844859f39baebeb1c3fa1c846e65095e11cc582
[Pman.Core] / DataObjects / Core_notify_sender.php
1 <?php
2 /**
3  * Table Definition for core_notify_sender
4  */
5 class_exists('DB_DataObject') ? '' : require_once 'DB/DataObject.php';
6
7 class Pman_Core_DataObjects_Core_notify_sender extends DB_DataObject 
8 {
9     ###START_AUTOCODE
10     /* the code below is auto generated do not remove the above tag */
11
12     public $__table = 'core_notify_sender';    // table name
13     public $id;                              // int(11)  not_null primary_key auto_increment
14     public $email;
15     public $poolname;
16     public $is_active;
17     public $priority;
18     
19     
20     
21     function emailAddrToSender($from_addr , $notify)
22     {
23         
24         $from = $from_addr->mailbox . '@' . $from_addr->host;
25
26         $ns = DB_DataObject::Factory($this->tableName());
27         $ns->setFrom(array(
28             'email' => $from,
29             'poolname' => $notify->tableName()
30         ));
31         if (!$ns->find(true)) {
32             $ns->is_active = 1;
33             $ns->priority = 1;
34             $ns->insert();
35             return false;
36         }
37         return $ns;
38     }
39     
40     
41     function emailToAddr($email)
42     {
43         require_once 'Mail/RFC822.php';
44         $parser = new Mail_RFC822();
45         $addresses = $parser->parseAddressList( $email['headers']['From'], 'localhost', false);
46         if (is_a($addresses, 'PEAR_Error')) {
47             return false;
48         }
49         return $addresses[0];
50         //print_r($email['headers']['From']);         print_R($from_addr);exit;
51
52       
53     }
54     
55     
56     function filterEmail($email, $notify)
57     {
58         //
59         if (empty($email['headers']['From']) || empty($notify)) {
60             return $email;
61         }
62         $bits = explode('@', $notify->to_email);
63         $to_dom = DB_DataObject::factory('core_domain')->loadOrCreate($bits[1]);
64         
65         $from_addr = $this->emailToAddr($email);
66         
67         $ns = $this->emailAddrToSender($from_addr, $notify);
68         if ($ns == false) {
69             return $email;
70         }
71         // is it blacklisted?
72         $bl = DB_DAtaObject::Factory('core_notify_sender_blacklist');
73         $bl->setFrom(array(
74                 'sender_id'=> $ns->id,
75                 'domain_id' => $to_dom->id
76         ));
77         if (!$bl->count()) {
78             return $email;
79         }
80         // it's blacklisted..
81         // try finding alternative.
82         $bl = DB_DAtaObject::Factory('core_notify_sender_blacklist');
83         $bl->domain_id = $to_dom->id;
84         $bad_ids = $bl->fetchAll('sender_id');
85         
86         $ns = DB_DataObject::Factory($this->tableName());
87         $ns->setFrom(array(
88             'domain_id' => $to_dom->id,
89             'poolname' => $notify->tableName(),
90             'is_active' => 1,
91         ));
92         $ns->whereAddIn('!id', $bad_ids, 'int');
93         if (!$ns->count()){
94             return $email; // no alternative available
95         }
96         $ns->limit(1);
97         $ns->find(true);
98         $mail['headers']['From'] = $from_addr->personal . ' <' . $ns->email .'>';
99         
100         return $mail;
101         
102         //check blacklist for 
103         
104          
105         
106     }
107     
108     function checkSmtpResponse($email, $notify, $errmsg)
109     {
110         $bl = DB_DataObject::factory('core_notify_sender_blacklist');
111         if (!$bl->messageIsBlacklisted($errmsg)) {
112             return; // ok.
113         }
114         // create a record.
115         
116         $bits = explode('@', $notify->to_email);
117         $to_dom = DB_DataObject::factory('core_domain')->loadOrCreate($bits[1]);
118         
119         
120         
121         $from_addr = $this->emailToAddr($email);
122         $ns = $this->emailAddrToSender($from_addr, $notify);
123       
124         $bl->setFrom(array(
125             'sender_id' => $ns->id,
126             'domain_id' => $to_dom->id,
127         ));
128         if ($bl->count()) {
129             return;
130         }
131         $bl->error_msg = $errmsg;
132         $bl->added_dt = $bl->sqlValue('NOW()');
133         $bl->insert();
134         
135     }
136     
137 }