zoukankan      html  css  js  c++  java
  • 使用redis实现邮件发送

    return [
        'connector'  => 'Redis',            // Redis 驱动
        'expire'     => null,                // 任务的过期时间,默认为60秒; 若要禁用,则设置为 null
        'default'    => 'default',        // 默认的队列名称
        'host'       => '127.0.0.1',        // redis 主机ip
        'port'       => 6379,            // redis 端口
        'password'   => '',                // redis 密码
        'select'     => 0,                // 使用哪一个 db,默认为 db0
        'timeout'    => 0,                // redis连接的超时时间
        'persistent' => false,            // 是否是长连接
    ];

     extra->queue.php  配置文件中加入上面内容

    <?php
    
    
    namespace appadmincontroller;
    
    
    use thinkQueue;
    
    class Test
    {
    
        public function actionWithHelloJob(){
            // 1.当前任务将由哪个类来负责处理。
            //   当轮到该任务时,系统将生成一个该类的实例,并调用其 fire 方法
            $jobHandlerClassName  = 'appadmincontrollerDemo';
            // 2.当前任务归属的队列名称,如果为新队列,会自动创建
            $jobQueueName        = "helloJobQueue";
            // 3.当前任务所需的业务数据 . 不能为 resource 类型,其他类型最终将转化为json形式的字符串
            //   ( jobData 为对象时,需要在先在此处手动序列化,否则只存储其public属性的键值对)
            $jobData             = [ 'name'=>'zhangsan'.time()] ;
            // 4.将该任务推送到消息队列,等待对应的消费者去执行
            $isPushed = Queue::push( $jobHandlerClassName , $jobData , $jobQueueName );
            // database 驱动时,返回值为 1|false  ;   redis 驱动时,返回值为 随机字符串|false
            if( $isPushed !== false ){
                echo date('Y-m-d H:i:s') . " a new Hello Job is Pushed to the MQ"."<br>";
            }else{
                echo 'Oops, something went wrong.';
            }
        }
    }
    <?php
    
    
    namespace appadmincontroller;
    
    
    use PHPMailerPHPMailerPHPMailer;
    use thinkDb;
    use thinkLoader;
    use thinkqueueJob;
    
    class Demo
    {
        /**
         * fire方法是消息队列默认调用的方法
         * @param Job            $job      当前的任务对象
         * @param array|mixed    $data     发布任务时自定义的数据
         */
        public function fire(Job $job,$data){
            $isJobDone = $this->doHelloJob($data);
    
            if ($isJobDone) {
                //如果任务执行成功, 记得删除任务
                $job->delete();
                print("<info>Hello Job has been done and deleted"."</info>
    ");
            }else{
                if ($job->attempts() > 3) {
                    //通过这个方法可以检查这个任务已经重试了几次了
                    print("<warn>Hello Job has been retried more than 3 times!"."</warn>
    ");
                    $job->delete();
                }
            }
        }
    
        /**
         * 根据消息中的数据进行实际的业务处理
         * @param array|mixed    $data     发布任务时自定义的数据
         * @return boolean                 任务执行的结果
         */
        private function doHelloJob($data) {
            // 根据消息中的数据进行实际的业务处理...
            Loader::import('PHPMailer.PHPMailer');//加载extend中的自定义类
            $mail = new PHPMailer(); //实例化
            header("content-type:text/html;charset=utf-8");
            // 使用SMTP方式发送
            $mail->IsSMTP();
            // 设置邮件的字符编码
            $mail->CharSet='UTF-8';
            // 企业邮局域名
            $mail->Host = 'smtp.qq.com';
            //---------qq邮箱需要的------//设置使用ssl加密方式登录鉴权
            $mail->SMTPSecure = 'ssl';
            //设置ssl连接smtp服务器的远程服务器端口号 可选465或587
            $mail->Port = 465;//---------qq邮箱需要的------
            // 启用SMTP验证功能
            $mail->SMTPAuth = true;
            //邮件发送人的用户名(请填写完整的email地址)
            $mail->Username = '729347004@qq.com' ;
            // 邮件发送人的 密码 (授权码)
            $mail->Password = 'lxiiemuacxjgbbeb';  //修改为自己的授权码
            //邮件发送者email地址
            $mail->From ="729347004@qq.com";
            //发送邮件人的标题
            $mail->FromName ="购买成功";
            //收件人的邮箱 给谁发邮件
    //        $email_addr = "519660157@qq.com";
            $email_addr = "729347004@qq.com";
            //收件人地址,可以替换成任何想要接收邮件的email信箱,格式是AddAddress("收件人email","收件人姓名")
            $mail->AddAddress("$email_addr", substr(  $email_addr, 0 , strpos($email_addr ,'@')));
            //回复的地址
            $mail->AddReplyTo('729347004@qq.com' , "" );
            $mail->AddAttachment("./mail.rar"); // 添加附件
            //set email format to HTML //是否使用HTML格式
            $mail->IsHTML(true);
            //邮件标题
            $mail->Subject = '购买成功通知';
            //邮件内容
            $mail->Body =  "<p style='color:red;font-size: 20px'>" . '恭喜您!预约成功,请您按时就诊哦!' . '</p>'."<p></p>";
            //附加信息,可以省略
            $mail->AltBody = '';
            // 添加附件,并指定名称
            $mail->AddAttachment( './error404.php' ,'php文件');
            //设置邮件中的图片
            $mail->AddEmbeddedImage("shuai.jpg", "my-attach", "shuai.jpg");
            if( !$mail->Send() ){
                $mail_return_arr['mark'] = false ;
                $str  =  "邮件发送失败. <p>";
                $str .= "错误原因: " . $mail->ErrorInfo;
                $mail_return_arr['info'] = $str ;
            }else{
                $mail_return_arr['mark'] = true ;
                $str =  "邮件发送成功";
                $mail_return_arr['info'] = $str ;
            }
        }
    
    }

    调用一次

    php think queue:listen --queue helloJobQueue

    一直执行

    php think queue:work --daemon --queue  helloJobQueue

    访问

    http://www.medical.com/admin/Test/actionWithHelloJob

    http://www.bakk.com/index.php/admin/Test/actionWithHelloJob

  • 相关阅读:
    Mootools遮罩层练习(原为网上的jquery写法)
    Notepad++ c编译环境 64
    Apache添加多端口
    数据库权限分配(远程共享数据库)(mysql)
    Zend studio13 导入已有php文件夹
    按钮js跳转到非表单提交页
    Sql case when 小例
    php 获取数组中的key值
    knit使用安装 ecstore knit位置 及调用路径
    python数据库操作
  • 原文地址:https://www.cnblogs.com/cyxng/p/14655524.html
Copyright © 2011-2022 走看看