tp5 发送邮件结合kafka消息队列

4 篇文章 0 订阅

一、安装邮件操作类

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+邮件发送的方法了,具体应用的话还是得根据需求来。使用流程大致就是这样,欢迎在评论区相互学习讨论!

感谢您的阅读!如果对你有用的话请点赞+收藏,您的鼓励就是我创作的不竭动力!

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
1,SDK简介 本SDK是基于ThinkPHP开发类库扩展,因此只能在ThinkPHP平台下使用(ThinkPHP版本要求2.0以上)。DEMO中用到了控制器分层,因此运行DEMO需使用ThinkPHP3.1.2版本。 2,目前支持的平台 目前可用登录平台为:腾讯QQ,腾讯微博,新浪微博,网易微博,人人网,360,豆瓣,Github,Google,MSN,点点,百度,开心网,搜狐。 3,包含的文件 ThinkSDK/ThinkOauth.class.php SDK基类,主要用于Oauth的认证,所有平台的SDK均需要继承此类 ThinkSDK/sdk/DiandianSDK.class.php (点点SDK) ThinkSDK/sdk/DoubanSDK.class.php (豆瓣SDK) ThinkSDK/sdk/GithubSDK.class.php (Github SDK) ThinkSDK/sdk/GoogleSDK.class.php (Google SDK) ThinkSDK/sdk/MsnSDK.class.php (MSN SDK) ThinkSDK/sdk/QqSDK.class.php (腾讯QQ SDK) ThinkSDK/sdk/RenrenSDK.class.php (人人网SDK) ThinkSDK/sdk/SinaSDK.class.php (新浪微博SDK) ThinkSDK/sdk/T163SDK.class.php (网易微博SDK) ThinkSDK/sdk/TencentSDK.class.php (腾讯微博SDK) ThinkSDK/sdk/X360SDK.class.php (360 SDK) ThinkSDK/sdk/BaiduSDK.class.php (百度SDK) ThinkSDK/sdk/KaixinSDK.class.php (开心网SDK) ThinkSDK/sdk/SohuSDK.class.php (搜狐SDK) 4,配置格式 SDK的配置格式如下(可参考DEMO中的配置) //将一下(TYPE)换成你对应的SDK类型 'THINK_SDK_(TYPE)' => array( 'APP_KEY' => '', //应用注册成功后分配的 APP ID 'APP_SECRET' => '', //应用注册成功后分配的KEY 'CALLBACK' => '', //注册应用填写的callback ) 5,接入登录方法 添加ThinkPHP扩展,将整个ThinkSDK目录放入到ThinkPHP的扩展目录下~Extend/Library/ORG/~。 添加SDK配置,按以上配置格式在项目配置中添加对应的SDK配置。(可参考DEMO中的配置文件) 跳转到授权页面,导入SDK基类import("ORG.ThinkSDK.ThinkOauth"),获取SDK实例$sdk=ThinkOauth::getInstance($type),跳转到授权页面redirect($sdk->getRequestCodeURL())。(可参考DEMO中的Index/login方法) 获取access_token,在授权成功的回调页面中,调用$sdk->getAccessToken($code, $extend)方法来获取access_token。(可参考DEMO中的Index/callback方法) 6,调用API方法 成功获取到access_token之后就可以调用相应平台的API了,调用方法比较简单,只需要调用$sdk->call($api, $param, $method)方法就可以了,其中:$api为接口名称,$param为接口参数(格式:name1=value1&name2=value2), $method为请求方法(GET或POST)。 例如: import("ORG.ThinkSDK.ThinkOauth"); //导入SDK基类 $qq = ThinkOauth::getInstance('qq', $token); //实例化腾讯QQ开放平台对象 $token 参数为授权成功后获取到的 $token $data = $qq->call('user/get_user_info'); //调用接口

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奶派三叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值