|
|
<?php
|
|
|
|
|
|
use Model\listsSql;
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 只有黑格 在使用此业务
|
...
|
...
|
@@ -15,7 +17,10 @@ |
|
|
*/
|
|
|
class HotMail {
|
|
|
|
|
|
public function __construct(){$this->start();}
|
|
|
public function __construct(){
|
|
|
$this->db = db();
|
|
|
$this->start();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* shopk那边的预热邮箱
|
...
|
...
|
@@ -24,6 +29,12 @@ class HotMail { |
|
|
private $shopkHotEmail = [];
|
|
|
|
|
|
/**
|
|
|
* @var \Lib\Db|\Lib\DbPool
|
|
|
*/
|
|
|
private $db;
|
|
|
|
|
|
|
|
|
/**
|
|
|
* @author:dc
|
|
|
* @time 2024/7/18 14:04
|
|
|
*/
|
...
|
...
|
@@ -41,140 +52,48 @@ class HotMail { |
|
|
|
|
|
$this->shopkHotEmail['job@aicc-email.com'] = 1;
|
|
|
|
|
|
$db = db();
|
|
|
foreach ($this->shopkHotEmail as $e=>$i){
|
|
|
try {
|
|
|
if(!$db->count("select count(*) from `hot_mail` where ".dbWhere(['email'=>$e]))){
|
|
|
$db->throw()->insert('hot_mail',['email'=>$e],false);
|
|
|
if(!$this->db->count("select count(*) from `hot_mail` where ".dbWhere(['email'=>$e]))){
|
|
|
$this->db->throw()->insert('hot_mail',['email'=>$e],false);
|
|
|
}
|
|
|
|
|
|
}catch (Throwable $e){}
|
|
|
}
|
|
|
|
|
|
|
|
|
// if($this->shopkHotEmail){
|
|
|
// array_map([$this,'moveMail'],$fob);
|
|
|
// }
|
|
|
$maxId = $this->db->value("select `id` from `lists` order by `id` desc limit 1");
|
|
|
for ($i=0;$i<ceil($maxId/1000);$i++){
|
|
|
$this->run(rand($i*1000,($i+1)*1000));
|
|
|
}
|
|
|
|
|
|
echo '已执行完成'.PHP_EOL;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 邮件检查及移动
|
|
|
* @param string $email 检查的邮箱
|
|
|
* @author:dc
|
|
|
* @time 2024/7/18 14:06
|
|
|
*/
|
|
|
private function moveMail(string $email){
|
|
|
echo '正在处理 '.$email."\n";
|
|
|
// 读取邮箱在表里的id
|
|
|
$email_id = db()->value(sprintf("select `id` from `%s` where `email` = '%s' limit 1",\Model\emailSql::$table, $email));
|
|
|
|
|
|
if($email_id){
|
|
|
$this->findFolder($email_id,'收件箱','s');
|
|
|
$this->findFolder($email_id,'发件箱','f');
|
|
|
$this->findFolder($email_id,'垃圾箱','l');
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
private $folder = [];
|
|
|
|
|
|
/**
|
|
|
* 查找文件夹
|
|
|
* @param int $email_id 邮箱id
|
|
|
* @param string $folder 那个文件夹
|
|
|
* @author:dc
|
|
|
* @time 2024/7/18 15:10
|
|
|
*/
|
|
|
private function findFolder(int $email_id, string $folder,string $type){
|
|
|
// 查询 文件夹
|
|
|
$folders = db()->all(\Model\folderSql::all($email_id,'`id`,`folder`'));
|
|
|
if(!$folders){
|
|
|
return true;
|
|
|
}
|
|
|
foreach ($folders as $f){
|
|
|
if(folderAlias($f['folder']) == $folder){
|
|
|
// 最后记录的id
|
|
|
// $last_id = db()->value('select max(`lists_id`) from `fob_hot_mail` where `email_id` = '.$email_id.' and `folder` = "'.$type.'" limit 1');
|
|
|
// $last_id = $last_id?$last_id:0;
|
|
|
$this->findList(new Data($email_id,$f['id'],$type,0));
|
|
|
}
|
|
|
}
|
|
|
return true;
|
|
|
private function run($id){
|
|
|
$list = $this->db->all(\Model\listsSql::first(dbWhere(['id'=>$id,'is_hots'=>0]),'`id`,`from`,`to`,`folder_id`'));
|
|
|
foreach ($list as $item){
|
|
|
if(empty($this->folder[$item['folder_id']])){
|
|
|
$this->folder[$item['folder_id']] = folderAlias($this->db->value(\Model\folderSql::first($item['folder_id'],'folder')));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查找 邮件
|
|
|
* @author:dc
|
|
|
* @time 2024/7/18 15:11
|
|
|
*/
|
|
|
private function findList(Data $data, int $p = 1){
|
|
|
$lists = db()->throw()->all(
|
|
|
sprintf(
|
|
|
"select `id`,`folder_id`,`lists`.`email_id`,`%s` from `lists` left join `fob_hot_mail` on `fob_hot_mail`.`lists_id` = `lists`.`id` where `lists`.`email_id` = %d and `folder_id` = %d and `fob_hot_mail`.`lists_id` is null order by `id` asc limit 1000 offset ".(($p-1)*1000),
|
|
|
$data->type=='f' ? 'to_name':'from', // 收件箱查询 from字段 发件箱 查询 to_name字段
|
|
|
$data->email_id,
|
|
|
$data->folder_id
|
|
|
)
|
|
|
);
|
|
|
|
|
|
if($lists){
|
|
|
echo '找到邮件 '.count($lists)."\n";
|
|
|
// 处理数据
|
|
|
foreach ($lists as $list){
|
|
|
$list['folder'] = $data->type;
|
|
|
$this->insertData($list);
|
|
|
}
|
|
|
$lists = null;
|
|
|
$list = null;
|
|
|
// 再次查找
|
|
|
$this->findList($data,$p + 1);
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 插入数据
|
|
|
* @param array $data
|
|
|
* @author:dc
|
|
|
* @time 2024/7/18 15:25
|
|
|
*/
|
|
|
private function insertData(array $data){
|
|
|
|
|
|
$isInsert = false;
|
|
|
if($data['folder'] != 'f'){
|
|
|
// 收件箱 匹配 from 字段
|
|
|
$isInsert = isset($this->shopkHotEmail[strtolower($data['from'])]);
|
|
|
// 是否是发件箱
|
|
|
if($this->folder[$item['folder_id']] == '发件箱'){
|
|
|
$w = ['email' => explode(',',$item['to'])];
|
|
|
}else{
|
|
|
// 发件箱 匹配 to_name字段
|
|
|
$to_name = is_array($data['to_name']) ? $data['to_name'] : @json_decode($data['to_name'],1);
|
|
|
if($to_name){
|
|
|
foreach ($to_name as $item){
|
|
|
// 找到了就退出去
|
|
|
if(isset($this->shopkHotEmail[strtolower($item['email'])])){
|
|
|
$isInsert = true;
|
|
|
$data['from'] = $item['email'];
|
|
|
break;
|
|
|
$w = ['email' =>$item['from']];
|
|
|
}
|
|
|
// 是否在 预热邮箱中
|
|
|
if($this->db->count('select count(*) from `hot_mail` where '.dbWhere($w))){
|
|
|
echo date('d H:i:s').' ==》 '.$item['id']."\n";
|
|
|
$this->db->update(listsSql::$table,['is_hots'=>1],dbWhere(['id'=>$item['id']]));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 是预热 邮箱发来的邮件
|
|
|
if($isInsert){
|
|
|
// 不存在 数据
|
|
|
if(db()->count("select count(*) from `fob_hot_mail` where `lists_id` = ".$data['id']) == 0){
|
|
|
db()->insert('fob_hot_mail',[
|
|
|
'lists_id' => $data['id'],
|
|
|
'email_id' => $data['email_id'],
|
|
|
'hot_form' => $data['from']??'',
|
|
|
'folder' => $data['folder']
|
|
|
],false);
|
|
|
}
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 获取预热邮箱
|
...
|
...
|
@@ -221,23 +140,6 @@ class HotMail { |
|
|
}
|
|
|
|
|
|
|
|
|
class Data {
|
|
|
|
|
|
public int $email_id = 0;
|
|
|
public int $folder_id = 0;
|
|
|
public string $type = '';
|
|
|
public int $last_id = 0;
|
|
|
|
|
|
public function __construct(int $email_id,int $folder_id, string $type,int $last_id)
|
|
|
{
|
|
|
$this->email_id = $email_id;
|
|
|
$this->folder_id = $folder_id;
|
|
|
$this->type = $type;
|
|
|
$this->last_id = $last_id;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
swoole_set_process_name('hot-email-run-man');
|
|
|
|
|
|
$pm = new Swoole\Process\Manager();
|
...
|
...
|
|