zoukankan      html  css  js  c++  java
  • Tp5使用消息队列实现邮键发送

    1、首先,compare需要下载安转包,如果你有的话就可以直接使用这个扩展包  消息队列扩展

    composer require topthink/think-queue

    在extra文件夹中的queue.php进行配置

    return [
    
        'connector' => 'database',
        'table'      => 'jobs',  //表名  你需要在数据库中创建这个表
        'expire' => null,       //  任务的过期时间,默认为60秒,若要禁用,则为null
    
    
    
    ];

    sql文件

    CREATE TABLE `jobs` (
      `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
      `queue` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
      `payload` longtext COLLATE utf8mb4_unicode_ci,
      `attempts` tinyint(3) unsigned DEFAULT NULL,
      `reserved` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
      `available_at` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
      `created_at` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
      `reserved_at` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `zfw_jobs_queue_index` (`queue`)
    ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

    2、然后配置你的邮件发送的一些配置项  下面是我的qq与用户密码,你需要去获取

     'smtp'            => [
            'server'           => "smtp.qq.com",//SMTP服务器 例如:smtp.qq.com/smtp.163.com
            'serverport'       => "",//SMTP服务器端口 例如:25
            'usermail'         => "407489226@qq.com",//SMTP服务器的用户邮箱
            'pass'             => "xxxxxxxxxxxxx",//SMTP服务器的用户密码  qq邮箱提供
            'smtpuser'         => "407489226@qq.com" //SMTP服务器的用户帐号
        ],

    3.在app下新建文件夹job  并在文件夹中创建Test类

    <?php
    
    namespace appjob;
    
    use thinkqueueJob;
    class Test
    {
        public function fire(Job $job, $data)
        {
        // extract(input());
    //sendMail 中第一个参数为收件人号码 参数二 标题 参数三 邮件内容
    $res = sendMail('407489226@qq.com','name','邮件内容'); if ($res){ $job->delete(); } } }

    4.在model中创建Test模型 书写实现消息队列的方法

    <?php
    
    namespace appadminmodel;
    
    use thinkModel;
    use thinkQueue;
    
    class Test extends Model
    {
    
        //指定表名
        protected $table="think_testsss";
    
        //
        public static  function add($data){
          return self::create($data);
      }
    
        protected static function init()
        {
            Test::afterInsert(function ($user) {
                Queue::later(30, 'appjobTest', $user, 'Test');
            });
        }
    }

    注意:有些类需要自己引入  不然不可以使用

    这时也需要一个test表

    CREATE TABLE `tests` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) DEFAULT NULL,
      `create_time` varchar(255) DEFAULT NULL,
      `update_time` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8mb4;

    5.书写发送邮件的方法

    <?php
    
    namespace appadmincontroller;
    use appadminmodelTest;
    use thinkDb;
    class Email extends Base
    {
        public function index(){
            return $this->fetch('email/index');
        }
    
        /*
         * 发送邮件
         */
        public function sendEmail(){
    
            $data=['name'=>'qyy'];
            $res=Test::add($data);
    
            if($res){
                return json(['code'=>200,'msg'=>'发送成功']);
            }else{
                return json(['code'=>100,'msg'=>'发送失败']);
            }
        }

    6.开启监听

    php think queue:work --daemon --queue test

    注意  test为你的模型名

    现在试着发送邮件,查看test与job表中是否有数据,并等待是否有邮件发送成功

    参考链接:https://blog.csdn.net/Qiyijie666/article/details/115667495?spm=1001.2014.3001.5501

    https://www.cnblogs.com/flzs/p/14070099.html

  • 相关阅读:
    php isset()与empty()的使用
    , , 的区别
    让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    当导航条滚动到顶部时固定到顶部
    JS:window.onload的使用
    jquery里面.length和.size()有什么区别
    2017.4.13(内置函数)作业
    文件内容的增删改查
    用户登陆程序,密码三次错误自动锁定用户名。
  • 原文地址:https://www.cnblogs.com/cyxng/p/14655289.html
Copyright © 2011-2022 走看看