SyncFolder.php 3.4 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 SyncFolder extends Command
//{
//    /**
//     * The name and signature of the console command.
//     *
//     * @var string
//     */
//    protected $signature = 'SyncFolder';
//
//    /**
//     * The console command description.
//     *
//     * @var string
//     */
//    protected $description = '同步邮箱的文件夹';
//
//    /**
//     * Execute the console command.
//     *
//     * @return int
//     */
//    public function handle()
//    {
//
//        // 这个是防止前一个任务没有完成,反而无法取得资源。
//        $rand = date('dHi');
//        // 携程数量越大,需要的内存越大
//        $max_coroutine  =   10000;
//        // 最大携程数量
//        \co::set(['max_coroutine'=>$max_coroutine]);
//
//        run(function () use ($rand){
//            // 获取邮箱总数量
//            $size = Email::where(['status'=>1,'pwd_error'=>0])->count();
////            Cache::set('syncMail:total',$size);
//            // 创建的携程数量
//            $max_coroutine = $size > 3000 ? 3000 : $size;
//            if ($max_coroutine){
//                for ($i = $max_coroutine; $i > 0; $i--) {
//                    // 创建携程
//                    go(function () use ($size,$rand){
////                        Log::error('携程:'.\co::getCid());
//
//                        $n = 0;
//                        while ($n <= $size){
//                            // 是否已存在
//                            if(Cache::add('syncMail'.$rand.':'.$n,$n,7200)) {
//                                $this->sync($n);
//                            }
//                            $n++;
//                        }
//
//                    });
//                }
//            }
//
//        });
//
//        return Command::SUCCESS;
//    }
//
//    /**
//     * 开始同步执行
//     * @param int $n 第几条数据
//     * @author:dc
//     * @time 2023/2/5 17:21
//     */
//    private function sync(int $n = 0){
//
//        $email = Email::where(['status'=>1,'pwd_error'=>0])
//            ->orderBy('id','asc')
//            ->select()->limit($n,1)
//            ->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']);
//                    }
//                }
//
//            }
//
//
//
//        }
//
//    }
//
//
//
//}