|
|
<?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');
|
|
|
|
|
|
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($item['from'],$this->black_emails)){
|
|
|
// 是否是ai邮件
|
|
|
if($this->db->count("select count(*) from `hot_mail` where ".dbWhere([
|
|
|
'email'=> $this->db->value(listsSql::first(dbWhere(['id'=>$item['email_id']]),'email'))
|
|
|
]))){
|
|
|
|
|
|
echo '删除 '.$item['id'].'===>'.$this->db->update(listsSql::$table,['deleted'=>1],dbWhere(['id'=>$item['id']]));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
swoole_set_process_name('auto-reply-run-man');
|
|
|
|
|
|
$pm = new Swoole\Process\Manager();
|
|
|
|
|
|
$pm->addBatch(3,function (){
|
|
|
|
|
|
swoole_set_process_name('auto-reply-email-run');
|
|
|
|
|
|
include_once "../vendor/autoload.php";
|
|
|
|
|
|
// while(1){
|
|
|
new AutoMail();
|
|
|
// 执行完了暂停5分钟在执行
|
|
|
sleep(40);
|
|
|
// }
|
|
|
|
|
|
},true);
|
|
|
|
|
|
$pm->start();
|
|
|
|
|
|
|
...
|
...
|
|