PHP mailer 队列发邮件 demos
用户注册页面 register.php
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>用户注册</title> <link rel="stylesheet" href="https://cdn.static.runoob.com/libs/bootstrap/3.3.7/css/bootstrap.min.css"> <script src="https://cdn.static.runoob.com/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://cdn.static.runoob.com/libs/bootstrap/3.3.7/js/bootstrap.min.js"></script> </head> <body> <?php if(!empty($_POST)){ //接受post数据 $user_email = htmlspecialchars($_POST['user_email']); $user_password = htmlspecialchars($_POST['user_password']); //实例化pdo,连接数据库 $db = new PDO('mysql:host=localhost;dbname=test','root','1234',array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8")); //sql查询 $sql = 'SELECT * FROM `users` WHERE `user_email` = :user_email'; //预处理 $stmt = $db->prepare($sql); //绑定变量 $stmt->bindParam(':user_email',$user_email); //执行操作 $stmt->execute(); //获取结果集 $res = $stmt->fetchAll(); if($res){ echo "<script type='text/javascript'>alert('该用户已经存在!');</script>"; }else{ //新增sql $sql_inserts = 'INSERT INTO `users`(`user_email`,`user_password`) VALUES(:user_email,:user_password)'; //预处理 $inserts = $db->prepare($sql_inserts); //绑定变量 $inserts->bindParam(':user_email',$user_email); $inserts->bindParam(':user_password',$user_password); //执行操作 $inserts->execute(); if($inserts){ //获取时间 $create_time = date("Y-m-d H:i:s"); $update_time = date("Y-m-d H:i:s"); //新增task sql $sql_task = 'INSERT INTO `task_list`(`user_email`,`status`,`create_time`,`update_time`) VALUES(:user_email,0,:create_time,:update_time)'; //预处理 $tasks = $db->prepare($sql_task); //绑定变量 $tasks->bindParam(':user_email',$user_email); $tasks->bindParam(':create_time',$create_time); $tasks->bindParam(':update_time',$update_time); //执行操作 $tasks->execute(); if($tasks){ echo "<script type='text/javascript'>$.post('do_queue.php');alert('注册成功!');</script>"; } }else{ echo "<script type='text/javascript'>alert('注册失败!');</script>"; } } } ?> <form class="form-horizontal" role="form" style="width: 40%;margin-top: 10px;" action="" method="post"> <div class="form-group"> <label for="firstname" class="col-sm-2 control-label">用户邮箱</label> <div class="col-sm-10"> <input type="text" name="user_email" class="form-control" id="user_email" placeholder="请输入邮箱"> </div> </div> <div class="form-group"> <label for="lastname" class="col-sm-2 control-label">用户密码</label> <div class="col-sm-10"> <input type="password" name="user_password" class="form-control" id="user_password" placeholder="请输入密码"> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button type="submit" class="btn btn-default" id="btn">注册</button> </div> </div> </form> <script type="text/javascript"> $("#btn").click(function(){ var user_email = $("#user_email").val(); var user_password = $("#user_password").val(); if(user_email == ''){ alert('邮箱不能为空!'); return false; } if(user_password == ''){ alert('密码不能为空!'); return false; } }); </script> </body> </html>
执行队列发送邮件 do_queue.php
<?php //执行命令 exec("D:\wamp\bin\php\php5.7\php.exe queue.php"); ?>
执行队列发送邮件 queue.php
<?php require './PHPMailer/PHPMailerAutoload.php'; function sendMail($host,$fromEmail,$fromPwd,$fromName,$toEmail,$toName,$subject,$content){ //实例化 $mail = new PHPMailer; //设置邮件使用SMTP $mail->isSMTP(); //邮件服务器地址 $mail->Host = $host; //启用SMTP身份认证 $mail->SMTPAuth = true; //设置邮件编码 $mail->Charset = "UTF-8"; //使用base64加密邮箱和密码 $mail->Username = $fromEmail; $mail->Password = $fromPwd; //发件人邮箱地址 $mail->From = $fromEmail; //发件人名称 $mail->FromName = $fromName; //添加接受者 $mail->addAddress($toEmail,$toName); //设置邮件格式为HTML $mail->isHTML(true); $mail->Subject = $subject; $mail->msgHTML($content); return $mail->send(); } //实例pdo对象,连接数据库 $db = new PDO('mysql:host=localhost;dbname=test','root','1234',array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8")); while(true){ //查询sql $sql = 'SELECT * FROM `task_list` WHERE `status` = 0 LIMIT 5'; //预处理 $stmt = $db->prepare($sql); //执行操作 $stmt->execute(); //获取数据 $data = $stmt->fetchAll(); if(!empty($data)){ foreach ($data as $value) { //发送邮件 $mail = sendMail('smtp.163.com','****@163.com','*************','18373288691@163.com',$value['user_email'],'email','主题','内容'); if($mail){ //发送后,更新status为1 $sql_update = 'UPDATE `task_list` SET `status` = 1 WHERE `task_id` = :task_id'; //预处理 $upd = $db->prepare($sql_update); //绑定变量 $upd->bindParam(':task_id',$value['task_id']); //执行操作 $upd->execute(); } } sleep(3); }else{ break; } }