<?php use Model\listsSql; /** * 自动回复的邮件 * @author:dc * @time 2024/9/6 17:09 * Class HotMail */ class AutoMail { public function __construct(){ $this->db = db(); $this->start(); } /** * shopk那边的预热邮箱 * @var array */ private $black_emails = []; /** * @var \Lib\Db|\Lib\DbPool */ private $db; private $fids = []; /** * @author:dc * @time 2024/7/18 14:04 */ private function start(){ $this->fids = $this->db->all("select `id` from `folders` where `folder` = '收件箱'"); $this->fids = array_column($this->fids,'id'); $this->black_emails = $this->db->all("select * from `ai_black_email`"); $this->black_emails = array_column($this->black_emails,'email'); $this->black_emails = array_map("strtolower",$this->black_emails); if(redis()->add('black_mail_sync2',1,60)){ echo '正在计算数据'; $maxId = $this->db->value("select `id` from `lists` order by `id` desc limit 1"); $id = 0; while (1){ $ids = []; for ($i=0;$i<1000;$i++){ $ids[] = $i+$id; } $id = end($ids); redis()->rPush('black_check_ids',implode(',',$ids)); if($id>$maxId){ break; } } echo '计算完成'; } while (1){ $ids = redis()->lPop('black_check_ids'); if($ids){ $ids = explode(',',$ids); $this->run($ids); }else{ echo '等待'.PHP_EOL; co::sleep(2); } } } private $filter = []; private function run($id){ $list = $this->db->all(\Model\listsSql::all(dbWhere(['id'=>$id,'deleted'=>0]),'`id`,`from`,`folder_id`,`email_id`')); foreach ($list as $item){ // 必须是收件箱 if(in_array($item['folder_id'],$this->fids)){ // 是否在黑名单中 if(in_array(strtolower($item['from']),$this->black_emails)){ if (!isset($this->filter[$item['email_id']])){ // 找到邮箱 $e = $this->db->value(\Model\emailSql::first($item['email_id'],'`email`')); // 是否是ai邮件 $this->filter[$item['email_id']] = $this->db->count("select count(*) from `hot_mail` where ".dbWhere(['email'=> $e])); } // 是否是ai邮件 if($this->filter[$item['email_id']]){ echo '删除 '.$item['id'].'===>'.$this->db->update(listsSql::$table,['deleted'=>1],dbWhere(['id'=>$item['id']]))."\n"; } } } } } } $pm = new Swoole\Process\Manager(); $pm->addBatch(3,function (){ include_once "../vendor/autoload.php"; // while(1){ new AutoMail(); // 执行完了暂停5分钟在执行 sleep(40); // } },true); $pm->start();