settable('email_cog'); } /** * 系统邮件发送邮件 * $to_uid 发送给。。。 * $rows 内容 */ public function sendmail($title, $body, $to_uid, $rows=array(), $zjsend=0, $oparm=array()) { if(!function_exists('socket_get_status') || !function_exists('fsockopen'))return '没有开启socket扩展无法使用'; if(!function_exists('openssl_sign'))return '没有开启openssl扩展无法使用'; $setrs = m('option')->getpidarr(-1); if(!$setrs)return '未设置发送邮件'; $serversmtp = $this->rock->arrvalue($setrs, 'email_sendhost'); $emailuser = $this->rock->arrvalue($setrs, 'email_sysuser'); $emailname = $this->rock->arrvalue($setrs, 'email_sysname'); $emailpass = $this->rock->arrvalue($setrs, 'email_syspass'); $serverport = $this->rock->arrvalue($setrs, 'email_sendport'); $emailsecure = $this->rock->arrvalue($setrs, 'email_sendsecure'); if(isempt($serversmtp) || isempt($serverport) || isempt($emailuser)|| isempt($emailpass))return '未设置发送帐号'; $to_em = $to_mn = $to_id = ''; if(is_array($to_uid)){ $to_id = arrvalue($to_uid,'receid','0'); $to_em = arrvalue($to_uid,'receemail'); $to_mn = arrvalue($to_uid,'recename'); }else{ $urs = $this->db->getall("select `email`,`name`,`id` from `[Q]admin` where `id` in($to_uid) and `email` is not null and `status`=1 order by `sort`"); foreach($urs as $k=>$rs){ $to_em.=','.$rs['email']; $to_mn.=','.$rs['name']; $to_id.=','.$rs['id']; } if(isempt($to_em))return '用户('.$to_uid.')没有设置邮箱'; $to_em = substr($to_em, 1); $to_mn = substr($to_mn, 1); $to_id = substr($to_id, 1); } if(isempt($to_em))return '没有接收人1'; $body = $this->rock->reparr($body, $rows); $title = $this->rock->reparr($title, $rows); $body = str_replace("\n", '
', $body); $msg = 'ok'; if(!getconfig('asynsend') || $zjsend==1){ $sarrs = array( 'emailpass' => $emailpass, 'serversmtp' => $serversmtp, 'serverport' => $serverport, 'emailsecure' => $emailsecure, 'emailuser' => $emailuser, 'emailname' => $emailname, 'receemail' => $to_em, 'recename' => $to_mn, 'title' => $title, 'body' => $body, ); foreach($oparm as $k1=>$v1)$sarrs[$k1] = $v1; $bo = $this->sendddddd($sarrs, true); if(!$bo)$msg = $this->errorinfo; }else{ //异步发送邮件 $uarr['title'] = $title; $uarr['body'] = $body; $uarr['receid'] = $to_id; $uarr['recename'] = $to_mn; $uarr['receemail'] = $to_em; $uarr['optdt'] = $this->rock->now(); $uarr['optid'] = $this->adminid; $uarr['optname'] = $this->adminname; $uarr['status'] = 0; foreach($oparm as $k1=>$v1)$uarr[$k1] = $v1; $sid = m('email_cont')->insert($uarr); m('reim')->asynurl('asynrun','sendemail', array( 'id' => $sid, 'stype' => 0 ));//系统邮件提醒用的 } return $msg; } /** * */ public function sendtoemail($params=array()) { $setrs = m('option')->getpidarr(-1); if(!$setrs)return '未设置发送邮件'; $serversmtp = $this->rock->arrvalue($setrs, 'email_sendhost'); $emailuser = $this->rock->arrvalue($setrs, 'email_sysuser'); $emailname = $this->rock->arrvalue($setrs, 'email_sysname'); $emailpass = $this->rock->arrvalue($setrs, 'email_syspass'); $serverport = $this->rock->arrvalue($setrs, 'email_sendport'); $emailsecure = $this->rock->arrvalue($setrs, 'email_sendsecure'); $barr = array( 'emailpass' => $emailpass, 'serversmtp' => $serversmtp, 'serverport' => $serverport, 'emailsecure' => $emailsecure, 'emailuser' => $emailuser, 'emailname' => $emailname, 'receemail' => '', 'recename' => '', 'title' => '', 'body' => '', ); foreach($params as $k=>$v)$barr[$k]=$v; return $this->sendddddd($barr, true); } //$jbs 密码是否加密 保存日志$log private function sendddddd($arr, $jbs, $log=false) { extract($arr); $pass = $emailpass; if($jbs)$pass = $this->rock->jm->uncrypt($pass); $mail = c('mailer'); $mail->setHost($serversmtp, $serverport, $this->rock->repempt($emailsecure)); $mail->setUser($emailuser, $pass); $mail->setFrom($emailuser, $emailname); $mail->addAddress($receemail, $recename); if(isset($ccemail) && !isempt($ccemail)){ $mail->addCC($ccemail, $ccname); } if(isset($attachpath) && !isempt($attachpath)){ $mail->addAttachment($attachpath, $attachname); } $mail->sendMail($title, $body); $bo = $mail->isSuccess(); if(!$bo){ $this->errorinfo = 'error:'.$mail->getErrror().';to:'.$receemail.''; } return $bo; } /** * 测试发送邮件 */ public function sendmail_test() { return $this->sendmail('测试邮件帐号','这只是一个测试邮件帐号,不要紧张!
来自:'.TITLE.'
发送人:'.$this->adminname.'
网址:'.URL.'
发送时间:'.$this->rock->now().'', $this->adminid, array(),1); } /** * 异步发送邮件 */ public function sendemailcont($id, $stype=-1) { $rs = m('email_cont')->getone($id); if(!$rs)return '记录不存在'; if($stype==-1)$stype = (int)$this->rock->get('stype'); if($stype == 0){ $msg = $this->sendmail($rs['title'],$rs['body'], array( 'receid' => $rs['receid'], 'receemail' => $rs['receemail'], 'recename' => $rs['recename'], ), array(), 1, array( 'ccname' => $rs['ccname'], 'ccemail' => $rs['ccemail'], 'attachpath'=> $rs['attachpath'], 'attachname'=> $rs['attachname'], )); }else{ $msg = $this->sendemailout($rs['optid'],array( 'title' => $rs['title'], 'body' => $rs['body'], 'receemail' => $rs['receemail'], 'recename' => $rs['recename'], 'ccname' => $rs['ccname'], 'ccemail' => $rs['ccemail'], 'attachpath'=> $rs['attachpath'], 'attachname'=> $rs['attachname'], 'mid' => $rs['mid'], ), 1); } $status = '2'; if($msg=='ok')$status = '1'; $uarr['status'] = $status; $uarr['senddt'] = $this->rock->now(); m('email_cont')->update($uarr, $id); return $msg; } /** * 用户自己外发发送 */ public function sendemailout($sendid, $canarr = array(), $zjsend=0) { $sendarr = array( 'title' => '', 'body' => '', 'receemail' => '', 'recename' => '', 'ccname' => '', 'ccemail' => '', 'attachpath' => '', 'attachname' => '', ); foreach($canarr as $k=>$v)$sendarr[$k] = $v; extract($sendarr); $setrs = m('option')->getpidarr(-1); if(!$setrs)return '未设置发送邮件'; $serversmtp = $this->rock->arrvalue($setrs, 'email_sendhost'); $serverport = $this->rock->arrvalue($setrs, 'email_sendport'); $emailsecure = $this->rock->arrvalue($setrs, 'email_sendsecure'); $myuser = m('admin')->getone($sendid,'name,email,emailpass'); if(!$myuser)return '发送人不存在'; $emailuser = $this->rock->arrvalue($myuser, 'email'); $emailname = $this->rock->arrvalue($myuser, 'name'); $emailpass = $this->rock->arrvalue($myuser, 'emailpass'); if(isempt($serversmtp) || isempt($serverport) || isempt($emailuser)|| isempt($emailpass))return '用户未设置邮件帐号密码'; $msg = 'ok'; $outzt = 2; if(!getconfig('asynsend') || $zjsend==1){ $bo = $this->sendddddd(array( 'emailpass' => $emailpass, 'serversmtp' => $serversmtp, 'serverport' => $serverport, 'emailsecure' => $emailsecure, 'emailuser' => $emailuser, 'emailname' => $emailname, 'receemail' => $receemail, 'recename' => $recename, 'ccname' => $ccname, 'ccemail' => $ccemail, 'attachpath' => $attachpath, 'attachname' => $attachname, 'title' => $title, 'body' => $body, ), false); if(!$bo)$msg = $this->errorinfo; if(isset($mid)){ if($msg=='ok')$outzt=1; m('emailm')->update('`outzt`='.$outzt.'', $mid); } }else{ //异步发送邮件 $uarr['title'] = $title; $uarr['body'] = $body; $uarr['receid'] = ''; $uarr['recename'] = $recename; $uarr['receemail'] = $receemail; $uarr['ccname'] = $ccname; $uarr['ccemail'] = $ccemail; $uarr['attachpath'] = $attachpath; $uarr['attachname'] = $attachname; $uarr['optdt'] = $this->rock->now(); $uarr['optid'] = $this->adminid; $uarr['optname'] = $this->adminname; $uarr['status'] = 0; if(isset($mid))$uarr['mid'] = $mid; $sid = m('email_cont')->insert($uarr); c('rockqueue')->push('email,anaysend', array( 'id' => $sid, 'stype' => 1 )); /* m('reim')->asynurl('asynrun','sendemail', array( 'id' => $sid, 'stype' => 1 ));*/ } return $msg; } }