123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495 |
- <?php
- namespace app\api\controller\v1;
- use app\api\controller\Base;
- use app\hander\HelpHander;
- use PHPMailer\PHPMailer\Exception;
- use PHPMailer\PHPMailer\PHPMailer;
- use think\Db;
- use tools\Oaimap;
- class Email extends Base
- {
- // 新增
- public function save(){
- model('Email')->add();
- HelpHander::success([],'操作成功');
- }
- // 编辑
- public function update(){
- model('Email')->edit();
- HelpHander::success([],'操作成功');
- }
- // 列表
- public function list(){
- $page = input('page/d',1);
- $size = input('size/d',10);
- $title = input('title','','trim');
- $status = input('status/d',0);
- $ret = model('Email')->lists($page,$size,$title,$status,$this->orgId);
- HelpHander::success($ret);
- }
- public function login(){
- $email = Db::name('user_email')->where('active',1)->where('user_id',$this->userId)->value('email');
- if(!$email){
- HelpHander::error('未设置邮箱账号或邮箱账号被禁用,请联系管理员');
- }
- $res = model('Email')->login($email);
- HelpHander::success(['url'=>$res]);
- }
- public function loginIpmc(){
- $email = 'ipmc@dr-ipmc.org.cn';
- $res = model('Email')->login($email);
- HelpHander::success(['url'=>$res]);
- }
- // 新消息数量
- public function newMessage(){
- $email = Db::name('user_email')->where('active',1)->where('user_id',$this->userId)->value('email');
- if(!$email){
- HelpHander::success([
- "count" => 0,
- "unseenCount" => 0,
- "uidNext" => 0,
- "newMessage" => []
- ]);
- }
- $res = model('Email')->newMessage($email);
- HelpHander::success($res);
- }
- // 删除
- public function del(){
- $id = input('id/d',0);
- model('Email')->del($id);
- HelpHander::success([],'操作成功');
- }
- // 批量更新通讯录
- public function batchTel(){
- set_time_limit(0);
- ini_set("memory_limit","2048M");
- model('Email')->batchTel();
- HelpHander::success([],'操作成功');
- }
- // 获取文件夹列表
- public function getFolders(){
- $uemail = $this->checkEmail();
- $config = config('app.email');
- $url = $config['host2'].'Email/getFolders';
- $ret = curl_post($url,['token' => $uemail['token']]);
- if(!$ret){
- HelpHander::error('数据获取失败');
- }
- $ret = json_decode($ret,true);
- if($ret['code'] != 0){
- HelpHander::error($ret['message']);
- }
- HelpHander::success($ret['data']);
- }
- // 获取邮件列表
- public function getMessages(){
- $uemail = $this->checkEmail();
- $data = [
- 'token' => $uemail['token'],
- 'page' => input('page/d',1),
- 'size' => input('size/d',10),
- 'keyword' => input('keyword','','trim'),
- 'folder' => input('folder','INBOX','trim') // 默认是收件箱
- ];
- $config = config('app.email');
- $url = $config['host2'].'Email/getMessages';
- $ret = curl_post($url,$data);
- if(!$ret){
- HelpHander::error('数据获取失败');
- }
- $ret = json_decode($ret,true);
- if($ret['code'] != 0){
- HelpHander::error($ret['message']);
- }
- HelpHander::success($ret['data']);
- }
- private function checkEmail(){
- $uemail = Db::name('user_email')->where('user_id',$this->userId)->find();
- if(!$uemail){
- HelpHander::error('改用户未设置邮箱');
- }
- $uemail['password'] = think_decrypt($uemail['password']);
- $uemail['name'] = Db::name('user_info')->where('user_id',$this->userId)->value('name');
- $token = think_encrypt(json_encode(['email'=>$uemail['email'],'password'=>$uemail['password']]),'',20);
- $uemail['token'] = $token;
- return $uemail;
- }
- // 发送邮件
- public function send(){
- $uemail = $this->checkEmail();
- $data = [
- 'token' => $uemail['token'],
- 'subject' => input('subject','','trim'),
- 'body' => input('body','','trim'),
- 'to' => input('to','','trim'), // [{"email":"hzd@dr-ipmc.org.cn","name":"hzd"}]
- 'cc' => input('cc','','trim'), // [{"email":"hzd@dr-ipmc.org.cn","name":"hzd"}]
- 'bcc' => input('bcc','','trim'), // [{"email":"hzd@dr-ipmc.org.cn","name":"hzd"}]
- 'attachment' => input('attachment','','trim'),
- 'bookTime' => input('bookTime','','trim'),
- 'priority' => input('priority/d',0),
- 'dnt' => input('dnt/d',0), // 0=不回复 1=回复
- 'messageFolder' => input('messageFolder','','trim'),// 编辑草稿箱时填写
- 'messageUid' => input('messageUid','','trim'), // 编辑草稿箱uid
- 'draftInfo' => input('draftInfo','','trim'), // draftInfo,有值时传,回复、转发 {"type":"reply","uid":1,"folder":"INBOX"}
- 'inReplyTo' => input('inReplyTo','','trim'), // 回复、转发,messageId
- 'references' => input('references','','trim'),// 回复、转发,messageId
- 'dsn' => input('dsn/d',0),// 0=发送成功不回复 1=发送成功回复
- ];
- $data['fromName'] = $uemail['name'];
- $data['fromEmail'] = $uemail['email'];
- if($data['bookTime'] && strtotime($data['bookTime']) <= time()){
- HelpHander::error('定时时间不能小于当前时间');
- }
- if(!$data['subject']){
- HelpHander::error('未填写主题');
- }
- if(!$data['to']){
- HelpHander::error('未填写收件人');
- }
- $config = config('app.email');
- $url = $config['host2'].'Email/sendMessage';
- $ret = curl_post($url,$data);
- if(!$ret){
- HelpHander::error('数据获取失败');
- }
- $ret = json_decode($ret,true);
- if($ret['code'] != 0){
- HelpHander::error($ret['message']);
- }
- HelpHander::success([],'发送成功');
- }
- // 保存草稿箱
- public function saveMessage(){
- $uemail = $this->checkEmail();
- $data = [
- 'token' => $uemail['token'],
- 'subject' => input('subject','','trim'),
- 'plain' => input('plain','','trim'),
- 'body' => input('body','','trim'),
- 'to' => input('to','','trim'), // [{"email":"hzd@dr-ipmc.org.cn","name":"hzd"}]
- 'cc' => input('cc','','trim'), // [{"email":"hzd@dr-ipmc.org.cn","name":"hzd"}]
- 'bcc' => input('bcc','','trim'), // [{"email":"hzd@dr-ipmc.org.cn","name":"hzd"}]
- 'attachment' => input('attachment','','trim'),
- 'bookTime' => input('bookTime','','trim'),
- 'priority' => input('priority/d',0),
- 'dnt' => input('dnt/d',0), // 0=不回复 1=回复
- 'messageFolder' => input('messageFolder','','trim'),// 编辑草稿箱时填写
- 'messageUid' => input('messageUid','','trim'), // 编辑草稿箱uid
- 'draftInfo' => input('draftInfo','','trim'), // draftInfo,有值时传,回复、转发 (type-uid-folder reply-1-INBOX)
- 'inReplyTo' => input('inReplyTo','','trim'), // 回复、转发,messageId
- 'references' => input('references','','trim'),// 回复、转发,messageId
- 'dsn' => input('dsn/d',0),// 0=发送成功不回复 1=发送成功回复
- ];
- $data['fromName'] = $uemail['name'];
- $data['fromEmail'] = $uemail['email'];
- $config = config('app.email');
- $url = $config['host2'].'Email/saveMessage';
- $ret = curl_post($url,$data);
- if(!$ret){
- HelpHander::error('数据获取失败');
- }
- $ret = json_decode($ret,true);
- if($ret['code'] != 0){
- HelpHander::error($ret['message']);
- }
- HelpHander::success($ret['data']);
- }
- public function messageSetSeen(){
- $uemail = $this->checkEmail();
- $data = [
- 'token' => $uemail['token'],
- 'setAction' => input('setAction/d',0),
- 'uids' => input('uids','','trim'),
- 'folder' => input('folder','INBOX','trim') // 默认是收件箱
- ];
- $config = config('app.email');
- $url = $config['host2'].'Email/messageSetSeen';
- $ret = curl_post($url,$data);
- if(!$ret){
- HelpHander::error('数据获取失败');
- }
- $ret = json_decode($ret,true);
- if($ret['code'] != 0){
- HelpHander::error($ret['message']);
- }
- HelpHander::success([],'操作成功');
- }
- public function messageSetSeenToAll(){
- $uemail = $this->checkEmail();
- $data = [
- 'token' => $uemail['token'],
- 'setAction' => input('setAction/d',0),
- 'folder' => input('folder','INBOX','trim') // 默认是收件箱
- ];
- $config = config('app.email');
- $url = $config['host2'].'Email/messageSetSeenToAll';
- $ret = curl_post($url,$data);
- if(!$ret){
- HelpHander::error('数据获取失败');
- }
- $ret = json_decode($ret,true);
- if($ret['code'] != 0){
- HelpHander::error($ret['message']);
- }
- HelpHander::success([],'操作成功');
- }
- public function messageSetFlagged(){
- $uemail = $this->checkEmail();
- $data = [
- 'token' => $uemail['token'],
- 'setAction' => input('setAction/d',0),
- 'uids' => input('uids','','trim'),
- 'folder' => input('folder','INBOX','trim') // 默认是收件箱
- ];
- $config = config('app.email');
- $url = $config['host2'].'Email/messageSetFlagged';
- $ret = curl_post($url,$data);
- if(!$ret){
- HelpHander::error('数据获取失败');
- }
- $ret = json_decode($ret,true);
- if($ret['code'] != 0){
- HelpHander::error($ret['message']);
- }
- HelpHander::success([],'操作成功');
- }
- public function messageDelete(){
- $uemail = $this->checkEmail();
- $data = [
- 'token' => $uemail['token'],
- 'uids' => input('uids','','trim'),
- 'folder' => input('folder','INBOX','trim') // 默认是收件箱
- ];
- $config = config('app.email');
- $url = $config['host2'].'Email/messageDelete';
- $ret = curl_post($url,$data);
- if(!$ret){
- HelpHander::error('数据获取失败');
- }
- $ret = json_decode($ret,true);
- if($ret['code'] != 0){
- HelpHander::error($ret['message']);
- }
- HelpHander::success([],'操作成功');
- }
- public function messageMove(){
- $uemail = $this->checkEmail();
- $data = [
- 'token' => $uemail['token'],
- 'uids' => input('uids','','trim'),
- 'fromFolder' => input('fromFolder','INBOX','trim'), // 默认是收件箱
- 'toFolder' => input('toFolder','INBOX','trim') // 默认是收件箱
- ];
- $config = config('app.email');
- $url = $config['host2'].'Email/messageMove';
- $ret = curl_post($url,$data);
- if(!$ret){
- HelpHander::error('数据获取失败');
- }
- $ret = json_decode($ret,true);
- if($ret['code'] != 0){
- HelpHander::error($ret['message']);
- }
- HelpHander::success([],'操作成功');
- }
- public function folderClear(){
- $uemail = $this->checkEmail();
- $data = [
- 'token' => $uemail['token'],
- 'folder' => input('folder','INBOX','trim'), // 默认是收件箱
- ];
- $config = config('app.email');
- $url = $config['host2'].'Email/folderClear';
- $ret = curl_post($url,$data);
- if(!$ret){
- HelpHander::error('数据获取失败');
- }
- $ret = json_decode($ret,true);
- if($ret['code'] != 0){
- HelpHander::error($ret['message']);
- }
- HelpHander::success([],'操作成功');
- }
- //最近联系人
- public function recent(){
- $uemail = $this->checkEmail();
- $data = [
- 'token' => $uemail['token'],
- ];
- $config = config('app.email');
- $url = $config['host2'].'Email/recent';
- $ret = curl_post($url,$data);
- if(!$ret){
- HelpHander::error('数据获取失败');
- }
- $ret = json_decode($ret,true);
- if($ret['code'] != 0){
- HelpHander::error($ret['message']);
- }
- HelpHander::success($ret['data'],'操作成功');
- }
- //企业通讯录
- public function addressBook(){
- $uemail = $this->checkEmail();
- $data = [
- 'token' => $uemail['token'],
- ];
- $config = config('app.email');
- $url = $config['host2'].'Email/addressBook';
- $ret = curl_post($url,$data);
- if(!$ret){
- HelpHander::error('数据获取失败');
- }
- $ret = json_decode($ret,true);
- if($ret['code'] != 0){
- HelpHander::error($ret['message']);
- }
- HelpHander::success($ret['data'],'操作成功');
- }
- public function createEml($data,$from){
- $date = date('D, d M Y H:i:s');
- $data['date'] = $date;
- $altbody = strip_tags($data['body']);
- $messageId = md5(json_encode($data));
- $partend = get_rand_num().'.'.time();
- $part1 = '1_'.$partend;
- $emlstr = "Mime-Version: 1.0".PHP_EOL;
- $emlstr .= "Date: ".$date.' +0800'.PHP_EOL;
- $emlstr .= "Content-Type: multipart/mixed;".PHP_EOL;
- $emlstr .= " boundary=\"--=_Part_{$part1}\"".PHP_EOL;
- $emlstr .= "Message-ID: <{$messageId}@localhost>".PHP_EOL;
- $emlstr .= "X-Mailer: Postfix".PHP_EOL;
- if($data['book_time']){
- $emlstr .= "TimedSendDate: 1".PHP_EOL;
- }
- $emlstr .= 'From: "=?utf-8?B?'.base64_encode($from['name']).'?=" <'.$from['email'].'>'.PHP_EOL;
- $tos = json_decode($data['to'],true);
- $tostr = [];
- foreach ($tos as $k=>$v){
- $str = '';
- if($v['name']){
- $str .= '"=?utf-8?B?'.base64_encode($v['name']).'?=" <'.$v['email'].'>';
- }else{
- $str .= '<'.$v['email'].'>';
- }
- $tostr[] = $str;
- }
- $emlstr .= 'To: '.implode(',',$tostr).PHP_EOL;
- $ccs = json_decode($data['cc'],true);
- if($ccs){
- $ccstr = [];
- foreach ($ccs as $k=>$v){
- $str = '';
- if($v['name']){
- $str .= '"=?utf-8?B?'.base64_encode($v['name']).'?=" <'.$v['email'].'>';
- }else{
- $str .= '<'.$v['email'].'>';
- }
- $ccstr[] = $str;
- }
- $emlstr .= 'Cc: '.implode(',',$ccstr).PHP_EOL;
- }
- $bccs = json_decode($data['bcc'],true);
- if($bccs){
- $bccstr = [];
- foreach ($bccs as $k=>$v){
- $str = '';
- if($v['name']){
- $str .= '"=?utf-8?B?'.base64_encode($v['name']).'?=" <'.$v['email'].'>';
- }else{
- $str .= '<'.$v['email'].'>';
- }
- $bccstr[] = $str;
- }
- $emlstr .= 'Bcc: '.implode(',',$bccstr).PHP_EOL;
- }
- if($data['dnt'] == 1){
- $emlstr .= 'Disposition-Notification-To: '.$from['name'].PHP_EOL;
- $emlstr .= 'X-Confirm-Reading-To: '.$from['name'].PHP_EOL;
- }
- if($data['priority'] == 1){
- $emlstr .= 'X-Priority: 1 (Highest)'.PHP_EOL;
- }
- $emlstr .= 'Subject: =?utf-8?B?'.base64_encode($data['subject']).'?='.PHP_EOL;
- $emlstr .= PHP_EOL.'----=_Part_'.$part1.PHP_EOL;
- $part2 = '2_'.$partend;
- $emlstr .= "Content-Type: multipart/alternative;".PHP_EOL;
- $emlstr .= " boundary=\"--=_Part_{$part2}".PHP_EOL;
- $emlstr .= PHP_EOL.'----=_Part_'.$part2.PHP_EOL;
- $emlstr .= 'Content-Type: text/plain; charset="utf-8"'.PHP_EOL;
- $emlstr .= 'Content-Transfer-Encoding: quoted-printable'.PHP_EOL;
- $emlstr .= PHP_EOL.quoted_printable_encode($altbody).PHP_EOL;
- $emlstr .= PHP_EOL.'----=_Part_'.$part2.PHP_EOL;
- $emlstr .= 'Content-Type: text/html; charset="utf-8"'.PHP_EOL;
- $emlstr .= 'Content-Transfer-Encoding: quoted-printable'.PHP_EOL;
- $emlstr .= PHP_EOL.quoted_printable_encode($data['body']).PHP_EOL;
- $emlstr .= PHP_EOL.'----=_Part_'.$part2.'--'.PHP_EOL;
- // 附件
- // $emlstr .= PHP_EOL.'----=_Part_'.$part1.PHP_EOL;
- // $emlstr .= 'Content-Type: image/png; name="favicon.png"'.PHP_EOL;
- // $emlstr .= 'Content-Disposition: attachment; filename="favicon.png"'.PHP_EOL;
- // $emlstr .= 'Content-Transfer-Encoding: base64'.PHP_EOL;
- // $emlstr .= PHP_EOL.base64_encode(file_get_contents('./favicon.png')).PHP_EOL;
- // $emlstr .= PHP_EOL.'----=_Part_'.$part1.'--'.PHP_EOL;
- file_put_contents('./email/'.date('Ymd_').$messageId.'.eml', $emlstr);
- }
- // 获取邮件
- public function getMessageByUid(){
- $uemail = $this->checkEmail();
- $data = [
- 'token' => $uemail['token'],
- 'uid' => input('uid','','trim'),
- 'folder' => input('folder','INBOX','trim') // 默认是收件箱
- ];
- $config = config('app.email');
- $url = $config['host2'].'Email/getMessageByUid';
- $ret = curl_post($url,$data);
- if(!$ret){
- HelpHander::error('数据获取失败');
- }
- $ret = json_decode($ret,true);
- if($ret['code'] != 0){
- HelpHander::error($ret['message']);
- }
- HelpHander::success($ret['data']);
- }
- }
|