| 
...
 | 
...
 | 
@@ -12,7 +12,7 @@ use Model\emailSql; | 
| 
 | 
 | 
 use Model\folderSql;
 | 
| 
 | 
 | 
 use Model\listsSql;
 | 
| 
 | 
 | 
 use Model\sendJobsSql;
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 use function Co\run;
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 /**
 | 
| 
...
 | 
...
 | 
@@ -24,23 +24,9 @@ use Model\sendJobsSql; | 
| 
 | 
 | 
 class Home extends Base {
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     /**
 | 
| 
 | 
 | 
      * 邮件列表 针对aicc应用那边
 | 
| 
 | 
 | 
      * @author:dc
 | 
| 
 | 
 | 
      * @time 2023/2/17 14:12
 | 
| 
 | 
 | 
      */
 | 
| 
 | 
 | 
     public function lists(){
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         $limit   =   app()->request('limit',20,['intval','abs']);
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         $last_id   =   app()->request('last_id',0,['intval','abs']);
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     private function getFolderIds($email_id){
 | 
| 
 | 
 | 
         $folder_ids   =   app()->request('folder_ids',[],['intval','abs']);
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         $udate = app()->request('udate',0,'intval');
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         $where = ['email_id'    =>  $this->getEmail('id')];
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         foreach ($folder_ids as $k=>$folder_id){
 | 
| 
 | 
 | 
             if(!$folder_id){
 | 
| 
 | 
 | 
                 unset($folder_ids[$k]);
 | 
| 
...
 | 
...
 | 
@@ -55,12 +41,34 @@ class Home extends Base { | 
| 
 | 
 | 
                 sprintf(
 | 
| 
 | 
 | 
                     "select `id` from `%s` where `email_id` = %d and `origin_folder` = 'INBOX'",
 | 
| 
 | 
 | 
                     folderSql::$table
 | 
| 
 | 
 | 
                     ,$where['email_id']
 | 
| 
 | 
 | 
                     ,$email_id
 | 
| 
 | 
 | 
                 )
 | 
| 
 | 
 | 
             );
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
             $folder_ids = [$folder_ids];
 | 
| 
 | 
 | 
         }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         return $folder_ids;
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     /**
 | 
| 
 | 
 | 
      * 邮件列表 针对aicc应用那边
 | 
| 
 | 
 | 
      * @author:dc
 | 
| 
 | 
 | 
      * @time 2023/2/17 14:12
 | 
| 
 | 
 | 
      */
 | 
| 
 | 
 | 
     public function lists(){
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         $limit   =   app()->request('limit',20,['intval','abs']);
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         $last_id   =   app()->request('last_id',0,['intval','abs']);
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         $udate = app()->request('udate',0,'intval');
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         $where = ['email_id'    =>  $this->getEmail('id')];
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         //目录
 | 
| 
 | 
 | 
         $where['folder_id'] = $folder_ids;
 | 
| 
 | 
 | 
         $where['folder_id'] = $this->getFolderIds($where['email_id']);
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         $sql = "`id` > ".$last_id;
 | 
| 
...
 | 
...
 | 
@@ -83,6 +91,79 @@ class Home extends Base { | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     /**
 | 
| 
 | 
 | 
      * v2 版本
 | 
| 
 | 
 | 
      * 同步规定 时间 之后的邮件
 | 
| 
 | 
 | 
      * @return string
 | 
| 
 | 
 | 
      * @throws \Lib\Err
 | 
| 
 | 
 | 
      * @author:dc
 | 
| 
 | 
 | 
      * @time 2023/8/2 16:19
 | 
| 
 | 
 | 
      */
 | 
| 
 | 
 | 
     public function sync(){
 | 
| 
 | 
 | 
         $emails = web_request_emails();
 | 
| 
 | 
 | 
         $udate = app()->request('udate',0,'intval');
 | 
| 
 | 
 | 
         if(!$udate){
 | 
| 
 | 
 | 
             return '';
 | 
| 
 | 
 | 
         }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         // 查询邮箱
 | 
| 
 | 
 | 
         $emails =   db()->all(emailSql::all(dbWhere(['email'=>$emails])));
 | 
| 
 | 
 | 
         if(!$emails){
 | 
| 
 | 
 | 
             return '';
 | 
| 
 | 
 | 
         }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         // 启用协程来处理
 | 
| 
 | 
 | 
         run(function () use ($emails,$udate){
 | 
| 
 | 
 | 
             foreach ($emails as $email){
 | 
| 
 | 
 | 
                 // 读取文件夹
 | 
| 
 | 
 | 
                 $fids = $this->getFolderIds($email['id']);
 | 
| 
 | 
 | 
                 $folders = db()->all(folderSql::all($email['id']));
 | 
| 
 | 
 | 
                 // 循环 文件夹
 | 
| 
 | 
 | 
                 foreach ($folders as $folder){
 | 
| 
 | 
 | 
                     // 是否在同步请求中
 | 
| 
 | 
 | 
                     if(in_array($folder['id'],$fids)){
 | 
| 
 | 
 | 
                         // 启动 协程
 | 
| 
 | 
 | 
                         go(function () use ($email,$udate,$folder){
 | 
| 
 | 
 | 
                             // 实例一个邮箱对象
 | 
| 
 | 
 | 
                             $mail = new Mail($email['email'],base64_decode($email['password']),$email['imap']);
 | 
| 
 | 
 | 
                             // 登录
 | 
| 
 | 
 | 
                             $mail->login();
 | 
| 
 | 
 | 
                             // 选择 文件夹
 | 
| 
 | 
 | 
                             $mail->client->selectFolder($folder['origin_folder']);
 | 
| 
 | 
 | 
                             // 最后的时间
 | 
| 
 | 
 | 
                             $maxudate = db()->value(
 | 
| 
 | 
 | 
                                 sprintf(
 | 
| 
 | 
 | 
                                     "select max(`udate`) from `%s` where `email_id` = %d and `folder_id` = %d limit 1",
 | 
| 
 | 
 | 
                                     listsSql::$table,
 | 
| 
 | 
 | 
                                     $email['id'],
 | 
| 
 | 
 | 
                                     $folder['id']
 | 
| 
 | 
 | 
                                 )
 | 
| 
 | 
 | 
                             );
 | 
| 
 | 
 | 
                             $udate = $udate > $maxudate ? $udate : $maxudate;
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
                             // 通过时间来搜索uid
 | 
| 
 | 
 | 
                             $uids = $mail->client->search(['ON'=>date('Y-m-d H:i:s',$udate)]);
 | 
| 
 | 
 | 
                             // 进行同步
 | 
| 
 | 
 | 
                             $mail->syncUidEmail(
 | 
| 
 | 
 | 
                                 $uids,
 | 
| 
 | 
 | 
                                 $email['id'],
 | 
| 
 | 
 | 
                                 $folder['origin_folder'],
 | 
| 
 | 
 | 
                                 $folder['id'],
 | 
| 
 | 
 | 
                                 [],
 | 
| 
 | 
 | 
                                 [],
 | 
| 
 | 
 | 
                                 db()
 | 
| 
 | 
 | 
                             );
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
                         });
 | 
| 
 | 
 | 
                     }
 | 
| 
 | 
 | 
                 }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
             }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         });
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 
 | 
...
 | 
...
 | 
 |