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;
}
}