|
|
<?php
|
|
|
|
|
|
namespace Controller\fob_ai;
|
|
|
|
|
|
|
|
|
|
|
|
use Controller\Base;
|
|
|
use Model\folderSql;
|
|
|
|
|
|
/**
|
|
|
* 黑格 fob 那边专用 业务
|
|
|
* 为定制逻辑
|
|
|
* @author:dc
|
|
|
* @time 2024/7/18 11:40
|
|
|
* Class MailList
|
|
|
* @package Controller\fob_ai
|
|
|
*/
|
|
|
class MailList extends Base {
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 邮件列表
|
|
|
* @throws \Lib\Err
|
|
|
* @author:dc
|
|
|
* @time 2024/7/18 11:40
|
|
|
*/
|
|
|
public function lists(){
|
|
|
|
|
|
// 分页 页数
|
|
|
$page = app()->request('page',1,'intval');
|
|
|
$page = $page ? $page : 1;
|
|
|
|
|
|
$limit = app()->request('limit',20,'intval');
|
|
|
$limit = $limit ? $limit : 1;
|
|
|
|
|
|
// 指定id
|
|
|
$ids = app()->request('mail_id');
|
|
|
$ids = is_array($ids) ? $ids : [$ids];
|
|
|
foreach ($ids as $i=>$d){
|
|
|
if(!is_numeric($d)){
|
|
|
unset($ids[$i]);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 附件
|
|
|
$attachment = app()->request('attachment',0,'bool_Val');
|
|
|
|
|
|
$deleted = 0;
|
|
|
|
|
|
$where = ['email_id'=>$this->getEmails('id')];
|
|
|
|
|
|
// 目录
|
|
|
$folder = app()->request('folder','收件箱');
|
|
|
// 只允许查询这里文件夹
|
|
|
if(in_array($folder,['收件箱','发件箱','垃圾箱','星标邮件','预热收件箱','预热发件箱']))
|
|
|
// 查询 文件夹
|
|
|
$folderList = db()->all(folderSql::all($where['email_id']));
|
|
|
$folder_id = [];
|
|
|
// 文件夹id
|
|
|
if($folderList){
|
|
|
foreach ($folderList as $item){
|
|
|
if(
|
|
|
// 数组文件夹
|
|
|
(is_array($folder) && in_array($item['folder'],$folder))
|
|
|
|| $item['folder'] == $folder
|
|
|
){
|
|
|
$folder_id[] = $item['id'];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if(!$folder_id){
|
|
|
app()->e('folder_not_fount');
|
|
|
}
|
|
|
|
|
|
//目录
|
|
|
$where['folder_id'] = $folder_id;
|
|
|
if($ids) $where['id'] = $ids;
|
|
|
|
|
|
if(paramHas('attachment')){
|
|
|
$where['is_file'] = $attachment ? 1 : 0; //附件
|
|
|
}
|
|
|
|
|
|
|
|
|
// 软删
|
|
|
$where['deleted'] = $deleted;
|
|
|
// 已读/未读
|
|
|
if(paramHas('seen')){
|
|
|
if(in_array($seen,[0,1])){
|
|
|
$where['seen'] = $seen;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
$where['_'] = [];
|
|
|
// 搜索关键字
|
|
|
$keyword = app()->request('keyword','',['htmlspecialchars','addslashes']);
|
|
|
if($keyword){
|
|
|
$where['_'][] = '`subject` like "%'.$keyword.'%"';
|
|
|
}
|
|
|
|
|
|
// 那个发的
|
|
|
$address = app()->request('address');
|
|
|
if($address){
|
|
|
if(is_array($address)){
|
|
|
// 发贱人
|
|
|
if(Verify::sEmail($address['from']??'')){
|
|
|
$where['from'] = $address['from'];
|
|
|
}
|
|
|
// 收件人
|
|
|
if(Verify::sEmail($address['to']??'')){
|
|
|
$where['_'][] = '`to_name` like "%'.$address.'%"';
|
|
|
}
|
|
|
|
|
|
}else if(Verify::sEmail($address)){
|
|
|
// 收件人/发件人
|
|
|
$where['_'][] = '(`from` = "'.$address.'" or `to_name` like "%'.$address.'%")';
|
|
|
}
|
|
|
}
|
|
|
// from 搜索收件人
|
|
|
if(app()->requestHas('from')){
|
|
|
// 如果是发件箱
|
|
|
if($folder == '发件箱'){
|
|
|
$where['to'] = app()->request('from');
|
|
|
if(!$where['to']){
|
|
|
// 不让查询数据
|
|
|
$where['id'] = 0;
|
|
|
}
|
|
|
}else{
|
|
|
$where['from'] = app()->request('from');
|
|
|
if(!$where['from']){
|
|
|
// 不让查询数据
|
|
|
$where['id'] = 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
// 回复
|
|
|
if (paramHas('answered')){
|
|
|
$where['answered'] = app()->request('answered',0,'bool_Val')?1:0;
|
|
|
}
|
|
|
|
|
|
// 这个主要是来筛选 是否是自己发送的
|
|
|
$fromto = app()->request('formorto');
|
|
|
if($fromto=='from'){
|
|
|
$where['from'] = $this->getEmails('email');
|
|
|
}elseif ($fromto=='to'){
|
|
|
$where['from.notin'] = $this->getEmails('email');
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 不查询哪些发件人的邮件
|
|
|
*/
|
|
|
$form_not_in = app()->request('from_not_in');
|
|
|
if($form_not_in){
|
|
|
$form_not_in = is_array($form_not_in) ? $form_not_in : [$form_not_in];
|
|
|
$form_not_in = array_filter($form_not_in,function ($v){
|
|
|
if(is_string($v) && Verify::sEmail($v)){
|
|
|
return true;
|
|
|
}
|
|
|
return false;
|
|
|
});
|
|
|
if($form_not_in){
|
|
|
if(isset($where['from.notin'])){
|
|
|
$where['from.notin'] = array_merge($where['from.notin'],$form_not_in);
|
|
|
}else{
|
|
|
$where['from.notin'] = $form_not_in;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
if(!empty($where['from.notin'])){
|
|
|
$where['from.notin'] = array_unique($where['from.notin']);
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$lists = db()->all(
|
|
|
listsSql::lists(
|
|
|
dbWhere($where),
|
|
|
$page,
|
|
|
$limit
|
|
|
)
|
|
|
);
|
|
|
|
|
|
// map
|
|
|
$lists = array_map(function ($v){
|
|
|
$v['uuid'] = get_email_uuid($v['subject'],$v['udate'],$v['from'],$v['to'],$v['size']);
|
|
|
if(!empty($v['description'])){
|
|
|
$v['description'] = @html_entity_decode($v['description'], ENT_COMPAT, 'UTF-8');
|
|
|
}
|
|
|
$v['to_name'] = @json_decode($v['to_name'],true);
|
|
|
$v['to_name'] = $v['to_name']?:[];
|
|
|
if($v['to_name']){
|
|
|
if(!empty($v['to_name'][0]['email'])){
|
|
|
$v['to'] = $v['to_name'][0]['email'];
|
|
|
}
|
|
|
$v['to_name'] = $v['to_name'][0]['name']??'';
|
|
|
}
|
|
|
if(is_array($v['to_name'])){
|
|
|
$v['to_name'] = '';
|
|
|
}
|
|
|
return $v;
|
|
|
},$lists);
|
|
|
|
|
|
// 总数
|
|
|
$total = db()->count(
|
|
|
listsSql::listCount(dbWhere($where))
|
|
|
);
|
|
|
|
|
|
app()->_json(listsPage($lists,$total,$page,$limit));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
...
|
...
|
|