| 
...
 | 
...
 | 
@@ -3,6 +3,7 @@ | 
| 
 | 
 | 
 namespace Event;
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 use Model\folderSql;
 | 
| 
 | 
 | 
 use Model\listsSql;
 | 
| 
 | 
 | 
 use Swlib\Saber;
 | 
| 
 | 
 | 
 use Swlib\SaberGM;
 | 
| 
 | 
 | 
 
 | 
| 
...
 | 
...
 | 
@@ -14,91 +15,69 @@ use Swlib\SaberGM; | 
| 
 | 
 | 
  * @package Event
 | 
| 
 | 
 | 
  */
 | 
| 
 | 
 | 
 class syncMail {
 | 
| 
 | 
 | 
     /**
 | 
| 
 | 
 | 
      * @var \Lib\Db|\Lib\DbPool
 | 
| 
 | 
 | 
      */
 | 
| 
 | 
 | 
     private $db;
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     public function __construct($id,$header,$data)
 | 
| 
 | 
 | 
     {
 | 
| 
 | 
 | 
         $db = db();
 | 
| 
 | 
 | 
         $this->db = db();
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         if(empty($data['to_name'])){
 | 
| 
 | 
 | 
             $data['to_name'] = [];
 | 
| 
 | 
 | 
         // 是否是预热邮件 aicc专用
 | 
| 
 | 
 | 
         if(!empty($header['Aicc-Hot-Mail']) || !empty($header['aicc-hot-mail'])){
 | 
| 
 | 
 | 
             return $this->hot($id);
 | 
| 
 | 
 | 
         }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         $data['to_name'] = is_array($data['to_name'])?$data['to_name']:json_decode($data['to_name']);
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         // 是否在指定文件夹内
 | 
| 
 | 
 | 
         $f = $db->value(folderSql::first($data['folder_id'],'folder'));
 | 
| 
 | 
 | 
         $f = folderAlias($f);
 | 
| 
 | 
 | 
         if($f=='收件箱'){
 | 
| 
 | 
 | 
             $f = 's';
 | 
| 
 | 
 | 
         }elseif($f=='发件箱'){
 | 
| 
 | 
 | 
             $f = 'f';
 | 
| 
 | 
 | 
         }elseif($f=='垃圾箱'){
 | 
| 
 | 
 | 
             $f = 'l';
 | 
| 
 | 
 | 
         }
 | 
| 
 | 
 | 
         if(in_array($f,['s','f','l'])){
 | 
| 
 | 
 | 
             // 是否是预热邮件 aicc专用
 | 
| 
 | 
 | 
             if(!empty($header['Aicc-Hot-Mail']) || !empty($header['aicc-hot-mail'])){
 | 
| 
 | 
 | 
                 $is_hot = 1;
 | 
| 
 | 
 | 
         $f = folderAlias($this->db->value(folderSql::first($data['folder_id'],'folder')));
 | 
| 
 | 
 | 
         if($f=='发件箱'){
 | 
| 
 | 
 | 
             if(empty($data['to_name'])){
 | 
| 
 | 
 | 
                 $data['to_name'] = [];
 | 
| 
 | 
 | 
             }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
             if(empty($is_hot)){
 | 
| 
 | 
 | 
                 if($f=='f'){
 | 
| 
 | 
 | 
                     $w = ['email' => array_column($data['to_name'],'email')];
 | 
| 
 | 
 | 
                 }else{
 | 
| 
 | 
 | 
                     $w = ['email' =>$data['from']];
 | 
| 
 | 
 | 
                 }
 | 
| 
 | 
 | 
             $data['to_name'] = is_array($data['to_name'])?$data['to_name']:json_decode($data['to_name']);
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
             $w = ['email' => array_column($data['to_name'],'email')];
 | 
| 
 | 
 | 
         }else{
 | 
| 
 | 
 | 
             $w = ['email' =>$data['from']];
 | 
| 
 | 
 | 
         }
 | 
| 
 | 
 | 
         // 是否在 预热邮箱中
 | 
| 
 | 
 | 
         if($this->db->count('select count(*) from `hot_mail` where '.dbWhere($w))){
 | 
| 
 | 
 | 
             return $this->hot($id);
 | 
| 
 | 
 | 
         }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
                 if($db->count('select count(*) from `hot_mail` where '.dbWhere($w))){
 | 
| 
 | 
 | 
                     $is_hot = 1;
 | 
| 
 | 
 | 
                 }
 | 
| 
 | 
 | 
             }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
             if(!empty($is_hot)){
 | 
| 
 | 
 | 
         // 不是预热邮箱
 | 
| 
 | 
 | 
         if($f=='收件箱'){
 | 
| 
 | 
 | 
             // mimecast@wsa.aero
 | 
| 
 | 
 | 
             $filterEmail = ['mimecast@wsa.aero'];
 | 
| 
 | 
 | 
             // 邮件过滤 这些邮箱都是系统邮箱
 | 
| 
 | 
 | 
             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'])){
 | 
| 
 | 
 | 
                 // 通知黑格 2024-08-22 新上 这个是异步的不会阻塞当前进程
 | 
| 
 | 
 | 
                 try {
 | 
| 
 | 
 | 
                     // 记录日志
 | 
| 
 | 
 | 
                     logs('识别到aicc预热邮件 '.$id.'-'.$data['email_id'].'-'.$data['from'],LOG_PATH.'/hot-mail.log');
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
                     $db->throw()->insert('fob_hot_mail',[
 | 
| 
 | 
 | 
                         'lists_id'  =>  $id,
 | 
| 
 | 
 | 
                         'email_id'  =>  $data['email_id'],
 | 
| 
 | 
 | 
                         'hot_form'  =>  $data['from'],
 | 
| 
 | 
 | 
                         'folder'    =>  $f
 | 
| 
 | 
 | 
                     ],false);
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
                 }catch (\Throwable $exception){
 | 
| 
 | 
 | 
                     logs($exception->getMessage());
 | 
| 
 | 
 | 
                     SaberGM::post('https://fob.ai.cc/api/email_new_push',[
 | 
| 
 | 
 | 
                         'sign'  =>  md5(date('ymd').'fob.ai.cc.email'),
 | 
| 
 | 
 | 
                         'id'    =>  $id,
 | 
| 
 | 
 | 
                         'subject'   =>  $data['subject'],
 | 
| 
 | 
 | 
                         'udate'   =>  $data['udate'],
 | 
| 
 | 
 | 
                         'from'   =>  $data['from'],
 | 
| 
 | 
 | 
                         'tos'    =>  array_column(json_decode($data['to_name'],1),'email')
 | 
| 
 | 
 | 
                     ]);
 | 
| 
 | 
 | 
                 }catch (\Throwable $e){
 | 
| 
 | 
 | 
                     // 就算异常了也不在推送了
 | 
| 
 | 
 | 
                 }
 | 
| 
 | 
 | 
             }else{
 | 
| 
 | 
 | 
                 if($f == 's'){
 | 
| 
 | 
 | 
                     // mimecast@wsa.aero
 | 
| 
 | 
 | 
                     $filterEmail = ['mimecast@wsa.aero'];
 | 
| 
 | 
 | 
                     // 邮件过滤 这些邮箱都是系统邮箱
 | 
| 
 | 
 | 
                     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'])){
 | 
| 
 | 
 | 
                         // 通知黑格 2024-08-22 新上 这个是异步的不会阻塞当前进程
 | 
| 
 | 
 | 
                         try {
 | 
| 
 | 
 | 
                             SaberGM::post('https://fob.ai.cc/api/email_new_push',[
 | 
| 
 | 
 | 
                                 'sign'  =>  md5(date('ymd').'fob.ai.cc.email'),
 | 
| 
 | 
 | 
                                 'id'    =>  $id,
 | 
| 
 | 
 | 
                                 'subject'   =>  $data['subject'],
 | 
| 
 | 
 | 
                                 'udate'   =>  $data['udate'],
 | 
| 
 | 
 | 
                                 'from'   =>  $data['from'],
 | 
| 
 | 
 | 
                                 'tos'    =>  array_column(json_decode($data['to_name'],1),'email')
 | 
| 
 | 
 | 
                             ]);
 | 
| 
 | 
 | 
                         }catch (\Throwable $e){
 | 
| 
 | 
 | 
                             // 就算异常了也不在推送了
 | 
| 
 | 
 | 
                         }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
                     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
                 }
 | 
| 
 | 
 | 
             }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     private function hot($id){
 | 
| 
 | 
 | 
         return $this->db->update(listsSql::$table,['is_hots'=>1],dbWhere(['id'=>$id]));
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     /**
 | 
...
 | 
...
 | 
 |