195 lines
6.4 KiB
PHP
195 lines
6.4 KiB
PHP
![]() |
<?php
|
|||
|
|
|||
|
/**
|
|||
|
* 发送消息:短信、邮件
|
|||
|
*/
|
|||
|
class userMsg extends Controller {
|
|||
|
public $user;
|
|||
|
public function __construct() {
|
|||
|
parent::__construct();
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 发送短信、邮件
|
|||
|
* @param [type] $data => array(
|
|||
|
* type 发送方式:sms、email
|
|||
|
* input 接收地址:手机号码、邮箱地址
|
|||
|
* action 系统发送api请求事件:phone_bind
|
|||
|
* // 非必需参数
|
|||
|
* emailType 邮件发送方式:系统、自定义
|
|||
|
* config 邮箱配置参数
|
|||
|
* config.add 邮箱配置参数追加-自定义服务器
|
|||
|
* )
|
|||
|
* @return void
|
|||
|
*/
|
|||
|
public function send($data){
|
|||
|
$type = $data['type'];
|
|||
|
$input = $data['input'];
|
|||
|
$check = array('sms' => 'phone', 'email' => 'email');
|
|||
|
if(!isset($check[$type])) {
|
|||
|
return array('code' => false, 'data' => LNG('common.invalidParam'));
|
|||
|
}
|
|||
|
if (!Input::check($input, $check[$type])) {
|
|||
|
return array('code' => false, 'data' => LNG('common.invalidFormat'));
|
|||
|
}
|
|||
|
if ($type == 'sms') {
|
|||
|
return $this->sendSms($data);
|
|||
|
}
|
|||
|
return $this->sendEmail($data);
|
|||
|
}
|
|||
|
|
|||
|
// 兼容旧版
|
|||
|
public function sms($data) {
|
|||
|
return $this->sendSms($data);
|
|||
|
}
|
|||
|
public function email($data) {
|
|||
|
return $this->sendEmail($data);
|
|||
|
}
|
|||
|
public function emailByCustom ($data) {
|
|||
|
return $this->sendEmailByOwn($data);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 发送短信
|
|||
|
* @param [type] $data
|
|||
|
* @return void
|
|||
|
*/
|
|||
|
public function sendSms($data){
|
|||
|
$data = array(
|
|||
|
'type' => $data['action'],
|
|||
|
'input' => $data['input'], // 邮箱or手机
|
|||
|
'language' => i18n::getType(),
|
|||
|
'config' => isset($data['config']) ? $data['config'] : array()
|
|||
|
);
|
|||
|
$res = Hook::trigger('send.sms.before', $data);
|
|||
|
if ($res) return $res; // [data,code] || false
|
|||
|
return Action('user.bind')->apiRequest('sms', $data);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 发送邮件
|
|||
|
* @param [type] $data
|
|||
|
* @return void
|
|||
|
*/
|
|||
|
public function sendEmail($data){
|
|||
|
if (isset($data['emailType'])) {
|
|||
|
$type = $data['emailType'];
|
|||
|
} else {
|
|||
|
$type = Model('SystemOption')->get('emailType');
|
|||
|
}
|
|||
|
// 自定义发送
|
|||
|
if ((int) $type) {
|
|||
|
return $this->sendEmailByOwn($data);
|
|||
|
}
|
|||
|
// 系统默认发送
|
|||
|
$data = array(
|
|||
|
'type' => $data['action'],
|
|||
|
'input' => $data['input'], // 邮箱or手机
|
|||
|
'language' => i18n::getType(),
|
|||
|
'config' => isset($data['config']) ? $data['config'] : ''
|
|||
|
);
|
|||
|
if(!$data['config']) unset($data['config']);
|
|||
|
return Action('user.bind')->apiRequest('email', $data);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 发送邮件-自定义(服务器)
|
|||
|
* @param [type] $data
|
|||
|
* @return void
|
|||
|
*/
|
|||
|
public function sendEmailByOwn($data){
|
|||
|
$init = array(
|
|||
|
'address' => '', // 收件人
|
|||
|
// 'cc' => '', // 抄送 a;b;c
|
|||
|
// 'bcc' => '', // 暗抄送 a;b;c
|
|||
|
'subject' => '', // 主题
|
|||
|
'content' => '', // 内容
|
|||
|
'signature' => '', // 发送者名称——和邮件内容里的签名不同
|
|||
|
'html' => 1, // 是否为html
|
|||
|
);
|
|||
|
foreach($init as $key => &$value) {
|
|||
|
if(isset($data['config'][$key])) $value = $data['config'][$key];
|
|||
|
};
|
|||
|
// 发件服务器信息
|
|||
|
if(isset($data['config']['server'])) {
|
|||
|
$init = array_merge($init, $data['config']['server']);
|
|||
|
}
|
|||
|
// 发送者名称
|
|||
|
$signature = _get($data, 'config.system.name');
|
|||
|
if (!$signature) $signature = Model('SystemOption')->get('systemName');
|
|||
|
$init['signature'] = $signature;
|
|||
|
// 邮件内容,自定义内容为字符串;根据模板获取为数组:array('type'=>'code','data'=>array('code' => 123))
|
|||
|
if(is_array($init['content'])) {
|
|||
|
$init['content'] = $this->getEmailContent($data);
|
|||
|
}
|
|||
|
|
|||
|
// 邮件发送
|
|||
|
$mail = new Mailer();
|
|||
|
$res = $mail->send($init);
|
|||
|
$type = _get($data, 'config.content.type');
|
|||
|
if($res['code'] && $type == 'code') {
|
|||
|
$res['data'] = _get($data, 'config.content.data.code');
|
|||
|
}
|
|||
|
return $res;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 获取邮件内容
|
|||
|
* @param [type] $type
|
|||
|
* @param [type] $data
|
|||
|
* @return void
|
|||
|
*/
|
|||
|
public function getEmailContent($data){
|
|||
|
$system = _get($data, 'config.system', array());
|
|||
|
$icon = 'https://api.kodcloud.com/static/images/icon/fav.png';
|
|||
|
if(Model('SystemOption')->get('versionType') == 'A'){
|
|||
|
$system['icon'] = $icon;
|
|||
|
$system['name'] = LNG('common.copyright.name');
|
|||
|
$system['desc'] = LNG('common.copyright.nameDesc');
|
|||
|
} else {
|
|||
|
$icon = _get($GLOBALS, 'config.settingSystemDefault.systemIcon', '');
|
|||
|
if ($icon) $system['icon'] = $icon;
|
|||
|
}
|
|||
|
if (!$system['icon']) $system['icon'] = $icon;
|
|||
|
if (!$system['name']) $system['name'] = Model('SystemOption')->get('systemName');
|
|||
|
if (!$system['desc']) $system['desc'] = Model('SystemOption')->get('systemDesc');
|
|||
|
|
|||
|
$addr = _get($data, 'config.address');
|
|||
|
$type = _get($data, 'config.content.type');
|
|||
|
$data = _get($data, 'config.content.data');
|
|||
|
$user = _get($data, 'user');
|
|||
|
if (!$user) $user = $addr;
|
|||
|
|
|||
|
switch($type) {
|
|||
|
case 'code':
|
|||
|
$data = array(
|
|||
|
'type' => 'code',
|
|||
|
'dear' => sprintf(LNG('admin.emailDear'), $user),
|
|||
|
'text' => LNG('admin.emailCodeText'),
|
|||
|
'code' => $data['code'],
|
|||
|
'date' => date('Y-m-d'),
|
|||
|
'system'=> $system,
|
|||
|
);
|
|||
|
break;
|
|||
|
case 'notice':
|
|||
|
$data = array(
|
|||
|
'type' => 'notice',
|
|||
|
'dear' => sprintf(LNG('admin.emailDear'), $user),
|
|||
|
'text' => is_array($data['text']) ? $data['text'] : array($data['text']), // 正文
|
|||
|
'date' => date('Y-m-d'),
|
|||
|
'system'=> $system,
|
|||
|
);
|
|||
|
break;
|
|||
|
default:
|
|||
|
return '';
|
|||
|
break;
|
|||
|
}
|
|||
|
ob_end_clean();
|
|||
|
ob_start();
|
|||
|
extract(array('data' => $data));
|
|||
|
require(TEMPLATE . '/user/email.html');
|
|||
|
$html = ob_get_contents();
|
|||
|
ob_end_clean();
|
|||
|
return $html;
|
|||
|
}
|
|||
|
}
|