作者 邓超

黑名单

  1 +<?php
  2 +
  3 +namespace Controller;
  4 +
  5 +/**
  6 + * 黑名单
  7 + * @author:dc
  8 + * @time 2023/4/23 14:48
  9 + * Class Blacklist
  10 + * @package Controller
  11 + */
  12 +class Blacklist {
  13 +
  14 +
  15 + public function add(){
  16 +
  17 + $type = app()->request('type');
  18 +
  19 + $value = app()->request('value');
  20 +
  21 +
  22 +
  23 +
  24 + db()->insert(\Model\blacklist::$table,[
  25 +
  26 + ]);
  27 +
  28 +
  29 +
  30 + }
  31 +
  32 +
  33 +
  34 +}
@@ -359,6 +359,16 @@ class Home extends Base { @@ -359,6 +359,16 @@ class Home extends Base {
359 $datas = db()->all(emailSql::getValues(['email'=>$emails],'`id`,`email`,`pwd_error`')); 359 $datas = db()->all(emailSql::getValues(['email'=>$emails],'`id`,`email`,`pwd_error`'));
360 foreach ($datas as $k=>$v){ 360 foreach ($datas as $k=>$v){
361 if(!$v['pwd_error']){ 361 if(!$v['pwd_error']){
  362 + $blacklist = app()->request('blacklist');
  363 + if(is_array($blacklist)){
  364 + $blacklist = [
  365 + 'emails' => $blacklist['emails']??[],
  366 + 'domain' => $blacklist['domain']??[],
  367 + ];
  368 + // 黑名单,7天过期时间
  369 + redis()->set('blacklist:'.$v['id'],$blacklist,86400*7);
  370 + }
  371 +
362 redis()->rPush('sync_email_lists', $v['id']); 372 redis()->rPush('sync_email_lists', $v['id']);
363 } 373 }
364 $datas[$k]['have_new'] = redis()->getDel('have_new_mail_'.$v['id']); 374 $datas[$k]['have_new'] = redis()->getDel('have_new_mail_'.$v['id']);
@@ -198,6 +198,13 @@ class Mail { @@ -198,6 +198,13 @@ class Mail {
198 return true; 198 return true;
199 } 199 }
200 200
  201 + // 读取黑名单
  202 + $blacklist = redis()->get('blacklist:'.$email_id);
  203 + $blackFolder = '';
  204 + if($blacklist){
  205 + $blackFolder = $db->value(folderSql::originFolder($email_id,'垃圾箱'));
  206 + }
  207 +
201 // 208 //
202 $nu = 100; 209 $nu = 100;
203 $msgno = 1; 210 $msgno = 1;
@@ -289,6 +296,27 @@ class Mail { @@ -289,6 +296,27 @@ class Mail {
289 'is_file' => MailFun::isFile($result['BODYSTRUCTURE']??'') ? 1: 0 //是否附件 296 'is_file' => MailFun::isFile($result['BODYSTRUCTURE']??'') ? 1: 0 //是否附件
290 ]; 297 ];
291 $data['date'] = $data['date'] ? : 0; 298 $data['date'] = $data['date'] ? : 0;
  299 +
  300 + // 验证是否存在黑名单中
  301 + if($blacklist){
  302 + // 邮箱是否在黑名单中
  303 + $isBlacklist = false;
  304 + if (!empty($blacklist['emails']) && is_array($blacklist['emails']) && in_array($data['from'],$blacklist['emails'])){
  305 + $isBlacklist = true;
  306 + }
  307 + // 域是否存在
  308 + if (!empty($blacklist['domain']) && is_array($blacklist['domain']) && in_array(explode('@',$data['from'])[1],$blacklist['domain'])){
  309 + $isBlacklist = true;
  310 + }
  311 +
  312 + if($isBlacklist && $blackFolder){
  313 + // 移入垃圾箱
  314 + $this->client->move($result['UID'],$blackFolder);
  315 + continue;
  316 + }
  317 + }
  318 +
  319 +
292 }catch (\Throwable $e){ 320 }catch (\Throwable $e){
293 logs( 321 logs(
294 '邮件解析失败:'.PHP_EOL.$e->getMessage().PHP_EOL.print_r($result,true), 322 '邮件解析失败:'.PHP_EOL.$e->getMessage().PHP_EOL.print_r($result,true),
  1 +<?php
  2 +
  3 +namespace Model;
  4 +
  5 +use Lib\DbPool;
  6 +
  7 +/**
  8 + * 黑名单
  9 + * @author:dc
  10 + * @time 2023/4/23 14:43
  11 + * Class blacklist
  12 + * @package Model
  13 + */
  14 +class blacklist {
  15 +
  16 + public static $table = 'blacklist';
  17 +
  18 +
  19 +
  20 +
  21 +
  22 +
  23 +}
@@ -48,6 +48,16 @@ class folderSql { @@ -48,6 +48,16 @@ class folderSql {
48 return "select {$filed} from `".self::$table."` where ".dbWhere($where)." limit 1"; 48 return "select {$filed} from `".self::$table."` where ".dbWhere($where)." limit 1";
49 } 49 }
50 50
51 - 51 + /**
  52 + * 读取源文件夹
  53 + * @param int $email_id
  54 + * @param string $folder
  55 + * @return string
  56 + * @author:dc
  57 + * @time 2023/5/8 11:01
  58 + */
  59 + public static function originFolder(int $email_id,string $folder){
  60 + return "select `origin_folder` from `".static::$table."` where `email_id` = {$email_id} and `folder` = '{$folder}' limit 1";
  61 + }
52 62
53 } 63 }