PushSync.php 3.1 KB
<?php
//
//namespace App\Console\Commands;
//
//use App\Models\Email;
//use App\Models\Folder;
//use Helper\Mail\Mail;
//use Illuminate\Console\Command;
//use Illuminate\Support\Facades\Cache;
//use Illuminate\Support\Facades\Log;
//use function Co\run;
//
//class PushSync extends Command
//{
//    /**
//     * The name and signature of the console command.
//     *
//     * @var string
//     */
//    protected $signature = 'PushSync';
//
//    /**
//     * The console command description.
//     *
//     * @var string
//     */
//    protected $description = '发布同步任务到队列中';
//
//    /**
//     * Execute the console command.
//     *
//     * @return int
//     */
//    public function handle()
//    {
//        // 最大协程 1000
//        \co::set(['max_coroutine'=>1000]);
//        // 开启协程池
//        run(function (){
//            // 统计邮箱总数量
//            $size = Email::select(['id'])->count();
//            if($size){
//                // 开启协程的数量
//                $i = ceil($size/100);
//                while ($i >= 0){
//                    // 开启一个协程
//                    go(function () use (&$i){
//                        // 取得邮箱列表
//                        $emails = Email::getPushEmailList($i);
//                        if($emails){
//                            foreach ($emails as $email) {
//
//                            }
//                        }
//                    });
//
//                    $i--;
//                }
//            }
//
//        });
//
//        return Command::SUCCESS;
//    }
//
//    /**
//     * 开始同步执行
//     * @param int $id 邮箱id
//     * @author:dc
//     * @time 2023/2/5 17:21
//     */
//    private function push(int $id = 0){
//
//        $email = Email::where(['status'=>1,'pwd_error'=>0])
//            ->where('id','>',$id)
//            ->orderBy('id','asc')
//            ->select()
//            ->first();
//
//        if($email){
//            // 登录imap服务器
//            Mail::login($email->email,$email->password,$email->imap);
//            // 设置id
//            Mail::$client[$email]->setId($email->id);
//            // 同步文件夹
//            Mail::syncFolder($email->email);
//
//            // 获取当前邮箱的所有文件夹
//            $folders =   Folder::_all($email->id);
//            // 目前只发现最高2级
//            foreach ($folders as $folder){
//                if(empty($folder['_child'])){
//                    // 同步邮件
//                    Mail::syncMail($email->email,$folder['origin_folder']);
//                }else{
//                    // 循环子级目录,有子级的情况,父级不可操作,且不会有邮件
//                    foreach ($folder['_child'] as $f){
//                        // 同步邮件
//                        Mail::syncMail($email->email,$folder['origin_folder'].'/'.$f['origin_folder']);
//                    }
//                }
//
//            }
//
//            // 再次执行
//            $this->push($email->id);
//
//        }
//
//    }
//
//
//
//}