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']); } }