208 lines
6.5 KiB
PHP
208 lines
6.5 KiB
PHP
<?php
|
|
class emailmClassModel extends Model
|
|
{
|
|
private $adminobj,$optionobj,$upfileobj,$recehost,$receyumi;
|
|
|
|
public function initModel()
|
|
{
|
|
$this->adminobj = m('admin');
|
|
$this->optionobj = m('option');
|
|
$this->upfileobj = c('upfile');
|
|
$this->recehost = $this->optionobj->getval('email_recehost');
|
|
$this->receyumi = $this->optionobj->getval('email_receyumi');
|
|
}
|
|
|
|
/**
|
|
* 用户收邮件
|
|
* $uid 用户id
|
|
* return 返回是数组就说明成功,字符串就失败
|
|
*/
|
|
public function receemail($uid)
|
|
{
|
|
$ukey = 'email_recexin_'.$uid.'';
|
|
$myurs = $this->adminobj->getone($uid, 'email,emailpass');
|
|
$time = $this->optionobj->getval($ukey,'',3);
|
|
if(!isempt($time))$time = strtotime($time);
|
|
if(isempt($this->receyumi))return '未设置收信邮箱域名';
|
|
if(isempt($myurs['email']))return '未设置邮箱,可到[系统→邮件管理→用户邮箱设置]下设置';
|
|
if(isempt($myurs['emailpass']))return '未设置邮箱密码,可到[系统→邮件管理→用户邮箱设置]下设置';
|
|
if(!contain($myurs['email'], $this->receyumi))return '邮箱域名必须是['.$this->receyumi.'],当前用户邮箱:'.$myurs['email'].'';
|
|
$rows = c('imap')->receemail($this->recehost, $myurs['email'], $myurs['emailpass'], $time);
|
|
if(!is_array($rows))return $rows;
|
|
$jf = 0;
|
|
$bool = true;
|
|
foreach($rows as $k=>$rs){
|
|
$message_id = $rs['message_id'];
|
|
if(isempt($message_id))$message_id = md5($rs['date']);
|
|
|
|
$where = "message_id='$message_id'";
|
|
$id = (int)$this->getmou('id',$where);
|
|
if($id ==0)$where = '';
|
|
if($id>0)continue;
|
|
|
|
$uarr['message_id'] = $message_id;
|
|
$uarr['title'] = $this->db->tocovexec($rs['subject'], 1);
|
|
$uarr['content'] = $this->db->tocovexec($rs['body'], 1);
|
|
$uarr['senddt'] = $rs['date'];
|
|
$uarr['optdt'] = $this->rock->now;
|
|
$uarr['size'] = $rs['size'];
|
|
$uarr['fromemail'] = $this->gshemail($rs['fromemail']);
|
|
$uarr['toemail'] = $this->gshemail($rs['toemail']);
|
|
$uarr['reply_toemail'] = $this->gshemail($rs['reply_toemail']);
|
|
$uarr['ccemail'] = $this->gshemail($rs['ccemail']);
|
|
$uarr['isturn'] = 1;
|
|
$uarr['isfile'] = count($rs['attach']) > 0 ? 1 : 0;
|
|
$uarr['type'] = 1;
|
|
$uarr['numoi'] = $rs['num'];
|
|
$form = $rs['from'][0];
|
|
$urs = $this->adminobj->emailtours($form->email);
|
|
$uarr['uid'] = 0;
|
|
$uarr['sendid'] = 0;
|
|
$uarr['sendname'] = '';
|
|
if(is_array($urs) && $urs){
|
|
$uarr['sendid'] = $urs['id'];
|
|
$uarr['uid'] = $urs['id'];
|
|
$uarr['sendname'] = $urs['name'];
|
|
}
|
|
$uarr['sendname'] = $uarr['fromemail'];
|
|
$uarr['recename'] = $uarr['toemail'];
|
|
|
|
$bool = $this->record($uarr, $where);
|
|
if($bool){
|
|
if($id ==0)$id = $this->db->insert_id();
|
|
$this->saveattach($rs['num'], $rs['attach'], $id);
|
|
$toarr = $this->saveemails($id, 0, $rs['to']);
|
|
$this->saveemails($id, 1, $rs['cc']);
|
|
$this->saveemails($id, 2, $rs['from']);
|
|
$uuarr['receid'] = $toarr[0];
|
|
//$uuarr['recename'] = $toarr[1];
|
|
$this->update($uuarr, $id);
|
|
$jf++;
|
|
}
|
|
}
|
|
if($bool)$this->optionobj->setval($ukey.'@-2', '共'.$jf.'封');//记录最后收信时间
|
|
return array(
|
|
'count' => $jf
|
|
);
|
|
}
|
|
|
|
private function gshemail($str)
|
|
{
|
|
$str = str_replace(array('"',' ','\''),'', $str);
|
|
return $str;
|
|
}
|
|
|
|
//保存到子表
|
|
public function saveemails($mid, $type, $arr)
|
|
{
|
|
$sid = $sna = '';
|
|
foreach($arr as $k=>$rs){
|
|
$where = "`mid`='$mid' and `type`=$type and `email`='$rs->email'";
|
|
$id = (int)$this->db->getmou('[Q]emails','id',$where);
|
|
if($id ==0)$where = '';
|
|
$uarr = array();
|
|
$uarr['mid'] = $mid;
|
|
$uarr['email'] = $rs->email;
|
|
$uarr['personal'] = $rs->personal;
|
|
$uarr['type'] = $type;
|
|
if($id==0){
|
|
$uarr['optdt'] = $this->rock->now;
|
|
}
|
|
$urs = $this->adminobj->emailtours($rs->email);
|
|
$uarr['uid'] = 0;
|
|
if(is_array($urs) && $urs){
|
|
$uarr['uid'] = $urs['id'];
|
|
$sid .=',u'.$urs['id'].'';
|
|
$sna .=','.$urs['name'].'';
|
|
}
|
|
$this->db->record('[Q]emails', $uarr, $where);
|
|
}
|
|
if($sid != ''){
|
|
$sid = substr($sid, 1);
|
|
$sna = substr($sna, 1);
|
|
}
|
|
return array($sid, $sna);
|
|
}
|
|
|
|
//保存邮件的附件
|
|
private function saveattach($oi, $arr, $id)
|
|
{
|
|
$dbs = m('file');
|
|
$doobj = c('down');
|
|
foreach($arr as $k=>$rs){
|
|
|
|
$fsad = explode('.', $rs['filename']);
|
|
$sarr['filename'] = $rs['filename'];
|
|
$sarr['filesize'] = $rs['filesize'];
|
|
$sarr['fileext'] = strtolower($fsad[count($fsad)-1]);
|
|
$sarr['keyoi'] = $oi.','.$rs['encoding'].','.$rs['filekey'];
|
|
$sarr['mtype'] = 'emailm';
|
|
$sarr['optid'] = $this->adminid;
|
|
$sarr['optname'] = $this->adminname;
|
|
$sarr['adddt'] = $this->rock->now;
|
|
$sarr['mid'] = $id;
|
|
$sarr['filesizecn'] = $this->upfileobj->formatsize($rs['filesize']);
|
|
$where = "`mtype`='emailm' and `mid`='$id' and `filename`='".$sarr['filename']."' and `filesize`='".$sarr['filesize']."'";
|
|
|
|
if($dbs->rows($where)==0){
|
|
$sarr['filepath'] = $doobj->savefilecont($sarr['fileext'], $rs['attachcont']);//下载附件
|
|
$fid = $dbs->insert($sarr);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* 统计我未读邮件
|
|
*/
|
|
public function wdtotal($uid)
|
|
{
|
|
$to= $this->gettotsllss($uid, 1);
|
|
return (int)$to;
|
|
}
|
|
|
|
//
|
|
private function gettotsllss($uid, $lx=0, $glx='')
|
|
{
|
|
$whe= 'b.uid='.$uid.' and a.`isturn`=1 and b.`isdel`=0 and b.`type` in(0,1)';
|
|
if($lx==1)$whe='b.uid='.$uid.' and a.`isturn`=1 and b.`isdel`=0 and b.`type` in(0,1) and b.`zt`=0';
|
|
if($lx==2)$whe='a.`sendid`='.$uid.' and a.`isturn`=0';
|
|
if($lx==3)$whe='b.uid='.$uid.' and b.`type` = 2 and b.`isdel`=0';
|
|
if($lx==4)$whe='b.uid='.$uid.' and a.`isturn`=1 and b.`type` in(0,1) and b.`isdel`=1';
|
|
if($glx=='whe')return $whe;
|
|
$to = $this->db->rows('`[Q]emailm` a left join `[Q]emails` b on a.`id`=b.`mid`', $whe);
|
|
return (int)$to;
|
|
}
|
|
|
|
public function gettowhere($uid, $lx)
|
|
{
|
|
return $this->gettotsllss($uid, $lx,'whe');
|
|
}
|
|
|
|
|
|
public function zongtotal($uid)
|
|
{
|
|
$zz = $this->gettotsllss($uid, 0); //所有邮件
|
|
$wd = $this->gettotsllss($uid, 1); //未读邮件
|
|
$cgx= $this->gettotsllss($uid, 2); //草稿箱
|
|
|
|
$yfs= $this->gettotsllss($uid, 3); //已发送
|
|
$ysc= $this->gettotsllss($uid, 4); //已删除
|
|
|
|
return array(
|
|
'wd' => $wd,
|
|
'zz' => $zz,
|
|
'cgx' => $cgx,
|
|
'yfs' => $yfs,
|
|
'ysc' => $ysc
|
|
);
|
|
}
|
|
|
|
/**
|
|
* 标识已读了
|
|
*/
|
|
public function biaoyd($uid,$sid)
|
|
{
|
|
m('emails')->update('`zt`=1','`uid`='.$uid.' and `mid` in('.$sid.')');
|
|
}
|
|
} |