思路:
1、业务逻辑层里把邮件消息丢进rabbitmq
//业务逻辑层
$data = array(
'subject' => 'confirm',//邮件模板名称
'level' => 10,//优先级
'user_id' => 12,
'params' => array(//替换邮件内变量的参数
'username' => 'ezreal',
)
);
$data = EmailTemplet::getTemplete($data);
$extensions = get_loaded_extensions();
if(in_array('amqp',$extensions)){
RabbitMq_Base::setRabbitMq(json_encode($data), 'email-log');
}
//邮件模板配置
public static function getTemplete($data)
{
//邮件模板配置
$config = array(
'verification' => 'Register successfully. Please complete verification.',
'approve' => 'Please approve the client identification.',
'checked' => 'Your verification has been approved. Please sign with the corresponding warehouse.',
'not_checked' => 'Your verification has not been approved.',
'confirm' => 'Please confirm the warehouse order on module client.',
'confirmed' => 'Your warehouse order has been confirmed.',
'not_confirmed' => 'Your warehouse order has not been confirmed.',
);
if(isset($config[$data['subject']]))
{
//获取邮件模板
$EmailTemplete = EmailTemplete::model()->find('templet_name=:templet_name AND is_delete = 0', array(':templet_name'=>$config[$data['subject']]));
if(!empty($EmailTemplete))
{
$data['content'] = $EmailTemplete->templet_content;
//替换变量
if(!empty($data['params']))
{
foreach($data['params'] as $key => $value)
{
$data['content'] = str_replace("{". $key . "}", $value, $data['content']);
}
}
}
$data['subject'] = $config[$data['subject']];
}
$User = User::model()->findByPk($data['user_id']);
if(!empty($User))
{
$data['recipient'] = $User->email;
}
else
{
$data['recipient'] = '123456@qq.com';
}
unset($data['params']);
unset($data['user_id']);
return $data;
}
2、计划任务获取消息列队的消息,保存到数据库
3、计划任务取数据库里未发送的消息内容,发送邮件