php 隊列發郵件的 demo


 

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;
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM