作者 邓超

x

@@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
3 namespace Event; 3 namespace Event;
4 4
5 use Model\folderSql; 5 use Model\folderSql;
  6 +use Model\listsSql;
6 use Swlib\Saber; 7 use Swlib\Saber;
7 use Swlib\SaberGM; 8 use Swlib\SaberGM;
8 9
@@ -14,91 +15,69 @@ use Swlib\SaberGM; @@ -14,91 +15,69 @@ use Swlib\SaberGM;
14 * @package Event 15 * @package Event
15 */ 16 */
16 class syncMail { 17 class syncMail {
  18 + /**
  19 + * @var \Lib\Db|\Lib\DbPool
  20 + */
  21 + private $db;
17 22
18 23
19 public function __construct($id,$header,$data) 24 public function __construct($id,$header,$data)
20 { 25 {
21 - $db = db(); 26 + $this->db = db();
22 27
23 - if(empty($data['to_name'])){  
24 - $data['to_name'] = []; 28 + // 是否是预热邮件 aicc专用
  29 + if(!empty($header['Aicc-Hot-Mail']) || !empty($header['aicc-hot-mail'])){
  30 + return $this->hot($id);
25 } 31 }
26 32
27 - $data['to_name'] = is_array($data['to_name'])?$data['to_name']:json_decode($data['to_name']);  
28 -  
29 // 是否在指定文件夹内 33 // 是否在指定文件夹内
30 - $f = $db->value(folderSql::first($data['folder_id'],'folder'));  
31 - $f = folderAlias($f);  
32 - if($f=='收件箱'){  
33 - $f = 's';  
34 - }elseif($f=='发件箱'){  
35 - $f = 'f';  
36 - }elseif($f=='垃圾箱'){  
37 - $f = 'l';  
38 - }  
39 - if(in_array($f,['s','f','l'])){  
40 - // 是否是预热邮件 aicc专用  
41 - if(!empty($header['Aicc-Hot-Mail']) || !empty($header['aicc-hot-mail'])){  
42 - $is_hot = 1; 34 + $f = folderAlias($this->db->value(folderSql::first($data['folder_id'],'folder')));
  35 + if($f=='发件箱'){
  36 + if(empty($data['to_name'])){
  37 + $data['to_name'] = [];
43 } 38 }
44 39
45 - if(empty($is_hot)){  
46 - if($f=='f'){  
47 - $w = ['email' => array_column($data['to_name'],'email')];  
48 - }else{  
49 - $w = ['email' =>$data['from']];  
50 - } 40 + $data['to_name'] = is_array($data['to_name'])?$data['to_name']:json_decode($data['to_name']);
  41 +
  42 + $w = ['email' => array_column($data['to_name'],'email')];
  43 + }else{
  44 + $w = ['email' =>$data['from']];
  45 + }
  46 + // 是否在 预热邮箱中
  47 + if($this->db->count('select count(*) from `hot_mail` where '.dbWhere($w))){
  48 + return $this->hot($id);
  49 + }
51 50
52 - if($db->count('select count(*) from `hot_mail` where '.dbWhere($w))){  
53 - $is_hot = 1;  
54 - }  
55 - }  
56 51
57 - if(!empty($is_hot)){ 52 + // 不是预热邮箱
  53 + if($f=='收件箱'){
  54 + // mimecast@wsa.aero
  55 + $filterEmail = ['mimecast@wsa.aero'];
  56 + // 邮件过滤 这些邮箱都是系统邮箱
  57 + if(!in_array($data['from'],$filterEmail) && !preg_match("/^((no-?reply)|(postmaster)|(mailer-daemon)|(email-notifications)|(googleplay-noreply)|(postmaster-noreply)|(privacy-noreply))@/i",$data['from']) && !$this->checkSubject($data['subject'])){
  58 + // 通知黑格 2024-08-22 新上 这个是异步的不会阻塞当前进程
58 try { 59 try {
59 - // 记录日志  
60 - logs('识别到aicc预热邮件 '.$id.'-'.$data['email_id'].'-'.$data['from'],LOG_PATH.'/hot-mail.log');  
61 -  
62 - $db->throw()->insert('fob_hot_mail',[  
63 - 'lists_id' => $id,  
64 - 'email_id' => $data['email_id'],  
65 - 'hot_form' => $data['from'],  
66 - 'folder' => $f  
67 - ],false);  
68 -  
69 - }catch (\Throwable $exception){  
70 - logs($exception->getMessage()); 60 + SaberGM::post('https://fob.ai.cc/api/email_new_push',[
  61 + 'sign' => md5(date('ymd').'fob.ai.cc.email'),
  62 + 'id' => $id,
  63 + 'subject' => $data['subject'],
  64 + 'udate' => $data['udate'],
  65 + 'from' => $data['from'],
  66 + 'tos' => array_column(json_decode($data['to_name'],1),'email')
  67 + ]);
  68 + }catch (\Throwable $e){
  69 + // 就算异常了也不在推送了
71 } 70 }
72 - }else{  
73 - if($f == 's'){  
74 - // mimecast@wsa.aero  
75 - $filterEmail = ['mimecast@wsa.aero'];  
76 - // 邮件过滤 这些邮箱都是系统邮箱  
77 - if(!in_array($data['from'],$filterEmail) && !preg_match("/^((no-?reply)|(postmaster)|(mailer-daemon)|(email-notifications)|(googleplay-noreply)|(postmaster-noreply)|(privacy-noreply))@/i",$data['from']) && !$this->checkSubject($data['subject'])){  
78 - // 通知黑格 2024-08-22 新上 这个是异步的不会阻塞当前进程  
79 - try {  
80 - SaberGM::post('https://fob.ai.cc/api/email_new_push',[  
81 - 'sign' => md5(date('ymd').'fob.ai.cc.email'),  
82 - 'id' => $id,  
83 - 'subject' => $data['subject'],  
84 - 'udate' => $data['udate'],  
85 - 'from' => $data['from'],  
86 - 'tos' => array_column(json_decode($data['to_name'],1),'email')  
87 - ]);  
88 - }catch (\Throwable $e){  
89 - // 就算异常了也不在推送了  
90 - }  
91 -  
92 - }  
93 -  
94 71
95 -  
96 - }  
97 } 72 }
98 73
  74 +
99 } 75 }
100 76
  77 + }
101 78
  79 + private function hot($id){
  80 + return $this->db->update(listsSql::$table,['is_hots'=>1],dbWhere(['id'=>$id]));
102 } 81 }
103 82
104 /** 83 /**