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