一、安装邮件操作类
composer require phpmailer/phpmailer
二、在config中配置相关信息
//邮件发送配置
'email' => [
'Host' => 'smtp.qq.com',//SMTP服务器 以QQ邮箱为例子
'Port' => '465',//邮件发送端口
'SMTPAuth' => true,//启用SMTP认证
'SMTPSecure' => 'ssl',// 设置安全验证方式为ssl
'CharSet' => 'UTF-8',//字符集
'Encoding' => 'base64',//编码方式
'Username' => '',//你的邮箱
'Password' => '',//你的授权码
'From' => '',//发件人地址(也就是你的邮箱)
'FromName' => '',//发件人姓名
]
三、在common.php中添加公共方法
//发送邮件
if(!function_exists('sendEmail')) {
function sendEmail($data = [])
{
Vendor('phpmailer.phpmailer'); //引入扩展类文件
$mail = new \PHPMailer\PHPMailer\PHPMailer(); //实例化
$mail->IsSMTP(); // 启用SMTP
$mail->Host = config('email.Host'); //SMTP服务器 以QQ邮箱为例子
$mail->Port = config('email.Port'); //邮件发送端口
$mail->SMTPAuth = config('email.SMTPAuth'); //启用SMTP认证
$mail->SMTPSecure = config('email.SMTPSecure'); // 设置安全验证方式为ssl
$mail->CharSet = config('email.CharSet'); //字符集
$mail->Encoding = config('email.Encoding'); //编码方式
$mail->Username = config('email.Username'); //你的邮箱
$mail->Password = config('email.Password'); //你的授权码
$mail->Subject = '你好呀tp5'; //邮件标题
$mail->From = config('email.From'); //发件人地址(也就是你的邮箱)
$mail->FromName = config('email.FromName'); //发件人姓名
if ($data && is_array($data)) {
foreach ($data as $k => $v) {
$mail->AddAddress($v['user_email'], "亲"); //添加收件人(地址,昵称)
$mail->IsHTML(true); //支持html格式内容
$mail->Body = $v['content']; //邮件主体内容
//发送成功就删除
if ($mail->Send()) {
return true;
} else {
return false;
}
}
}
}
}
四、启动kafka
windows kafka安装教程
4.1 首先启动zookeeper
在kafka根目录中右键
输入以下命令
bin/windows/zookeeper-server-start.bat config/zookeeper.properties
效果
最小化窗口在后台运行
4.2 再启动kafka
再打开一个命令框
bin/windows/kafka-server-start.bat config/server.properties
效果
五、添加生产者
直接上代码
public function index()
{
$rk = new \RdKafka\Producer();
$rk->addBrokers("127.0.0.1:9092"); //kafka服务器地址
// $rk->addBrokers("10.0.0.1,10.0.0.2"); //多服务器地址
$topic = $rk->newTopic("1810a"); //topic名称
$email = [
'qhl'=>'123123@qq.com',
'zfb'=>'123321@qq.com',
'zyj'=>'11111@qq.com',
'csc'=>'22222@qq.com',
'lmy'=>'33333@qq.com',
];
foreach($email as $k=>$v) {
$topic->produce(RD_KAFKA_PARTITION_UA, 0, $this->test($v,$k));
$rk->poll(0);
sleep(5);
}
while ($rk->getOutQLen() > 0) {
$rk->poll(50);
}
}
public function test($email,$msg)
{
$data[0] = ['user_email'=>$email,'content'=>"你好,".$msg."!這裏是kafka測試頻道"];
//注意邮件发送格式为数组,下标不要改变
$res = sendEmail($data);
}
以上代码就可以创建一个kafka生产者了,可以使用网页端去运行
六、创建消费者
这个使用原生php就可以,需要使用cli运行模式来运行,否则出不来效果。
$conf = new \RdKafka\Conf();
$conf->set('group.id', 'myConsumerGroup');
$rk = new \RdKafka\Consumer($conf);
$rk->addBrokers("127.0.0.1:9092");
$topicConf = new \RdKafka\TopicConf();
$topicConf->set('auto.commit.interval.ms', 100);
$topicConf->set('offset.store.method', 'file');
$topicConf->set('offset.store.path', sys_get_temp_dir());
$topicConf->set('auto.offset.reset', 'smallest');
$topic = $rk->newTopic("1810a", $topicConf);
// Start consuming partition 0
$topic->consumeStart(0, RD_KAFKA_OFFSET_STORED);
while (true) {
$message = $topic->consume(0, 5 * 10000);
switch ($message->err) {
case RD_KAFKA_RESP_ERR_NO_ERROR:
//没有错误打印信息
var_dump($message);
break;
case RD_KAFKA_RESP_ERR__PARTITION_EOF:
echo "等待接收信息\n";
break;
case RD_KAFKA_RESP_ERR__TIMED_OUT:
echo "超时\n";
break;
default:
throw new \Exception($message->errstr(), $message->err);
break;
}
}
效果
七、总结
以上就是kafka+邮件发送的方法了,具体应用的话还是得根据需求来。使用流程大致就是这样,欢迎在评论区相互学习讨论!
感谢您的阅读!如果对你有用的话请点赞+收藏,您的鼓励就是我创作的不竭动力!
|