当前,我试图在提交注册表格后使用PHPMailer发送电子邮件,但我成功接收了电子邮件,但在发送电子邮件后没有重定向或收到任何消息通知框。
注册表单
<form id="form_register" method="post" class="form-horizontal">
<span id="log"></span>
<div class="form-group mb5">
<label for="username" class="col-xs-12 mb0">Username</label>
<div class="col-xs-12">
<input type="text" class="form-control" placeholder="Username" name="username" id="username">
</div>
</div>
<div class="form-group mb5">
<label for="login-password" class="col-xs-12 mb0">First Name</label>
<div class="col-xs-12">
<input type="text" class="form-control" placeholder="First Name" name="first_name" id="first_name">
</div>
</div>
<div class="form-group mb5">
<label for="login-password" class="col-xs-12 mb0">Last Name</label>
<div class="col-xs-12">
<input type="text" class="form-control" placeholder="Last Name" name="last_name" id="last_name">
</div>
</div>
<div class="form-group mb5">
<label for="login-password" class="col-xs-12 mb0">Email</label>
<div class="col-xs-12">
<input type="email" class="form-control" placeholder="Email address" name="email" id="email">
</div>
</div>
<div class="form-group mb5">
<label for="login-password" class="col-xs-12 mb0">Password</label>
<div class="col-xs-12">
<input type="password" class="form-control" placeholder="Password" name="password" id="password">
</div>
</div>
<div class="form-group mb5">
<label for="login-password" class="col-xs-12 mb0">Confirm Password</label>
<div class="col-xs-12">
<input type="password" class="form-control" placeholder="Confirm Password" name="confirm_pass" id="confirm_pass">
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label text-left" for="gender">Gender</label>
<div class="col-md-9">
<select id="gender" name="gender" class="form-control" size="1">
<option value="male">Male</option>
<option value="female">Female</option>
<option value="other">Other</option>
</select>
</div>
</div>
<div class="form-group">
<div class="col-xs-7">
</div>
<div class="col-xs-5 text-right">
<button type="submit" class="btn btn-effect-ripple btn-sm btn-warning btn-block" name="create_account" id="create_account"><i class="fa fa-user-plus"></i> Sign up</button>
</div>
</div>
</form>
这是ajax的工作:
function regform()
{
var data = $("#form_register").serialize();
$.ajax({
type : 'POST',
url : 'core/register.class.php',
data : data,
beforeSend: function()
{
$("#log").fadeOut();
$("#create_account").html('<i class="fa fa-spinner fa-spin"></i>');
},
success : function(response){
if(response=="emptycaptcha"){
$("#log").fadeIn();
$("#log").html('<div class="notice notice-sm notice-danger"><strong><i class="fa fa-info-circle"></i> Empty Captcha</strong> Please fill in the captcha to continue.</div>');
$("#create_account").html('<i class="fa fa-user-plus"></i> Sign Up');
}else if(response=="wrongcaptcha"){
$("#log").html('<div class="notice notice-sm notice-danger"><strong><i class="fa fa-info-circle"></i> Wrong Captcha</strong> Please fill in the captcha correctly.</div>');
$("#create_account").html('<i class="fa fa-user-plus"></i> Sign Up');
}else if((response=="noact") || (response=="adminact")){
$("#log").fadeIn();
$("#log").html('<div class="notice notice-sm notice-success"><strong><i class="fa fa-info-circle"></i> Successfully Registered!</strong> You will be redirected to Login Page...</div>');
$("#create_account").html('<i class="fa fa-user-plus"></i> Sign Up');
setTimeout(function() {
window.location.href = "login.php";
}, 5000);
}else if(response=="emailact"){
$("#log").fadeIn();
$("#log").html('<div class="notice notice-sm notice-success"><strong><i class="fa fa-info-circle"></i> Successfully Registered!</strong> A Verification Email has been sent to your email.You will be redirected to verification page...</div>');
$("#create_account").html('<i class="fa fa-user-plus"></i> Sign Up');
var uemail = $('#email').val();
setTimeout(function() {
window.location.href = "verification.php?verify="+uemail;
}, 5000);
}
},
error: function(response){
$("#log").html('<div class="notice notice-sm notice-danger"><strong><i class="fa fa-info-circle"></i> Error !</strong> Something went wrong.</div>');
}
});
return false;
}
这是PHP部分,用于接收我的表单输入并将代码和电子邮件发送到电子邮件php文件
if (isset($_POST['create_account'])){
$username = trim($_POST['username']);
$first_name = trim($_POST['first_name']);
$last_name = trim($_POST['last_name']);
$email = trim($_POST['email']);
$pass = trim($_POST['password']);
$password = PASSWORD_HASH($pass, PASSWORD_BCRYPT);
$gender = $_POST['gender'];
$code = mt_rand(1111111, 9999999);
$reg_date = date('Y-m-d');
try{
$rai = $db_con->prepare("ALTER TABLE users AUTO_INCREMENT = 1");
$rai->execute();
if($settings['account_act']=='noact'){
$v_status = 'true';
$a_status = 'true';
$stmt = $db_con->prepare("INSERT INTO users(username,first_name, last_name, email, password, gender, a_status, reg_date, v_code, v_status) VALUES(:uname, :fn, :ln, :email, :pass, :gender, :a_status, :regd, :code, :v_status)");
$stmt->execute(array(":uname"=>$username,":fn"=>$first_name,":ln"=>$last_name,":email"=>$email,":pass"=>$password,":gender"=>$gender,":a_status"=>$a_status,"regd"=>$reg_date,":code"=>$code,":v_status"=>$v_status));
echo 'noact';
}else if($settings['account_act']=='emailact'){
$v_status = 'false';
$a_status = 'false';
$stmt = $db_con->prepare("INSERT INTO users(username,first_name, last_name, email, password, gender, a_status, reg_date, v_code, v_status) VALUES(:uname, :fn, :ln, :email, :pass, :gender, :a_status, :regd, :code, :v_status)");
$stmt->execute(array(":uname"=>$username,":fn"=>$first_name,":ln"=>$last_name,":email"=>$email,":pass"=>$password,":gender"=>$gender,":a_status"=>$a_status,"regd"=>$reg_date,":code"=>$code,":v_status"=>$v_status));
send_code($code,$email);
echo 'emailact';
}
}else if($settings['account_act']=='adminact'){
$v_status = 'false';
$a_status = 'false';
$stmt = $db_con->prepare("INSERT INTO users(username,first_name, last_name, email, password, gender, a_status, reg_date, v_code, v_status) VALUES(:uname, :fn, :ln, :email, :pass, :gender, :a_status, :regd, :code, :v_status)");
$stmt->execute(array(":uname"=>$username,":fn"=>$first_name,":ln"=>$last_name,":email"=>$email,":pass"=>$password,":gender"=>$gender,":a_status"=>$a_status,"regd"=>$reg_date,":code"=>$code,":v_status"=>$v_status));
echo 'adminact';
}
}
catch(PDOException $e){
echo "sorry".$e->getMessage();
}
}
email.class.php
function send_code($code,$email){
//Load composer's autoloader
require 'PHPMailer/vendor/autoload.php';
$mail = new PHPMailer(true); // Passing `true` enables exceptions
try {
//Server settings
$mail->SMTPDebug = 2; // Enable verbose debug output
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp.gmail.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = 'xxxxx'; // SMTP username
$mail->Password = 'xxxxx'; // SMTP password
$mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587; // TCP port to connect to
//Recipients
$mail->setFrom('xxxxxxxxx', 'xxxx');
$mail->addAddress($email, 'User'); // Add a recipient
//$mail->addAddress('ellen@example.com'); // Name is optional
//$mail->addReplyTo('info@example.com', 'Information');
//$mail->addCC('cc@example.com');
//$mail->addBCC('bcc@example.com');
//Attachments
//$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments
//$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name
//Content
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body = 'This is the HTML message body <b>in bold!</b>'.$code;
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
$mail->send();
//echo 'Message has been sent';
header('location:../verification.php?verify='.$email);
//echo 'emailact';
} catch (Exception $e) {
echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
}
}
现在,如果我从register.class.php中删除send_code($ code,$ email),那么我就成功地收到了重定向和通知。我已经尝试了将近3个小时,但没有任何进展。
UPDATE1: 我已经启用了error_reporting和display_error,但是我没有在phperror日志中收到任何错误,也没有在chrome控制台中收到任何错误。 我尝试使用console.log(response),我在gmail中正确接收了电子邮件,并且我也正确接收了“ emailact”响应,但是为什么我没有重定向?日志如下:
2018-07-21 14:53:03客户->服务器:这是HTML消息正文,以粗体显示! 9759376
2018-07-21 14:53:03客户端->服务器:
2018-07-21 14:53:03客户端->服务器:
2018-07-21 14:53:03客户端->服务器:--b1_vph8ZrSzb5duNdneV6Z64s04gZP7o2um2oEAjFQXso--
2018-07-21 14:53:03客户端->服务器:
2018-07-21 14:53:03客户端->服务器:。
2018-07-21 14:53:04服务器->客户端:250 2.0.0 OK 1532184784 v4-v6sm5199360wra.22-gsmtp
2018-07-21 14:53:04客户端->服务器:退出
2018-07-21 14:53:04服务器->客户:221 2.0.0关闭连接v4-v6sm5199360wra.22-gsmtp
emailact
更新2 :(已解决) 最后,我解决了它与email.class.php无关的问题,但是我认为它与最终日志console.log(response)中的响应有关我很好地接收了php mailer的全部工作量,我认为整个日志考虑到这个,我将js安排在成功函数中,如下所示:
success : function(response){
console.log(response);
if(response=="emptycaptcha"){
$("#log").fadeIn();
$("#log").html('<div class="notice notice-sm notice-danger"><strong><i class="fa fa-info-circle"></i> Empty Captcha</strong> Please fill in the captcha to continue.</div>');
$("#create_account").html('<i class="fa fa-user-plus"></i> Sign Up');
}else if(response=="wrongcaptcha"){
$("#log").html('<div class="notice notice-sm notice-danger"><strong><i class="fa fa-info-circle"></i> Wrong Captcha</strong> Please fill in the captcha correctly.</div>');
$("#create_account").html('<i class="fa fa-user-plus"></i> Sign Up');
}else if((response=="noact") || (response=="adminact")){
$("#log").fadeIn();
$("#log").html('<div class="notice notice-sm notice-success"><strong><i class="fa fa-info-circle"></i> Successfully Registered!</strong> You will be redirected to Login Page...</div>');
$("#create_account").html('<i class="fa fa-user-plus"></i> Sign Up');
setTimeout(function() {
window.location.href = "login.php";
}, 5000);
}else{
//if(response == "emailact"){
$("#log").fadeIn();
$("#log").html('<div class="notice notice-sm notice-success"><strong><i class="fa fa-info-circle"></i> Successfully Registered!</strong> A Verification Email has been sent to your email.You will be redirected to verification page...</div>');
$("#create_account").html('<i class="fa fa-user-plus"></i> Sign Up');
var uemail = $('#email').val();
setTimeout(function() {
window.location.href= "verification.php?verify="+uemail;
}, 5000);
}
}
答案 0 :(得分:0)
您的ajax
很好,它正在将数据发送到php
文件,但是php
无法访问该信息,因为您没有定义(我不知道他们叫什么名字)假设方法名称:
$.ajax({
type : 'POST',
url : 'core/register.class.php',
data : {'create_account': data}, //********this is too important!!!
beforeSend: function()
{
$("#log").fadeOut();
$("#create_account").html('<i class="fa fa-spinner fa-spin"></i>');
},
第二件事是在core/register.class.php
中,您没有正确定义参数,这是获取序列化数据的正确方法:
if (isset($_POST['create_account'])){
$get = explode('&', $_POST['create_account'] ); // explode with &
foreach ( $get as $key => $value) {
$valn[ substr( $value, 0 , strpos( $value, '=' ) ) ] = substr( $value, strpos( $value, '=' ) + 1 ) ;
}
// access your query param
$username = trim($valn['username']);
$first_name = trim($valn['first_name']);
$last_name = trim($valn['last_name']);
$email = trim($valn['email']);
$pass = trim($valn['password']);
$password = PASSWORD_HASH($pass, PASSWORD_BCRYPT);
$gender = $valn['gender'];
$code = mt_rand(1111111, 9999999);
$reg_date = date('Y-m-d');
try{
$rai = $db_con->prepare("ALTER TABLE users AUTO_INCREMENT = 1");
$rai->execute();
if($settings['account_act']=='noact'){
$v_status = 'true';
$a_status = 'true';
$stmt = $db_con->prepare("INSERT INTO users(username,first_name, last_name, email, password, gender, a_status, reg_date, v_code, v_status) VALUES(:uname, :fn, :ln, :email, :pass, :gender, :a_status, :regd, :code, :v_status)");
$stmt->execute(array(":uname"=>$username,":fn"=>$first_name,":ln"=>$last_name,":email"=>$email,":pass"=>$password,":gender"=>$gender,":a_status"=>$a_status,"regd"=>$reg_date,":code"=>$code,":v_status"=>$v_status));
echo 'noact';
}else if($settings['account_act']=='emailact'){
$v_status = 'false';
$a_status = 'false';
$stmt = $db_con->prepare("INSERT INTO users(username,first_name, last_name, email, password, gender, a_status, reg_date, v_code, v_status) VALUES(:uname, :fn, :ln, :email, :pass, :gender, :a_status, :regd, :code, :v_status)");
$stmt->execute(array(":uname"=>$username,":fn"=>$first_name,":ln"=>$last_name,":email"=>$email,":pass"=>$password,":gender"=>$gender,":a_status"=>$a_status,"regd"=>$reg_date,":code"=>$code,":v_status"=>$v_status));
send_code($code,$email);
echo 'emailact';
}
}else if($settings['account_act']=='adminact'){
$v_status = 'false';
$a_status = 'false';
$stmt = $db_con->prepare("INSERT INTO users(username,first_name, last_name, email, password, gender, a_status, reg_date, v_code, v_status) VALUES(:uname, :fn, :ln, :email, :pass, :gender, :a_status, :regd, :code, :v_status)");
$stmt->execute(array(":uname"=>$username,":fn"=>$first_name,":ln"=>$last_name,":email"=>$email,":pass"=>$password,":gender"=>$gender,":a_status"=>$a_status,"regd"=>$reg_date,":code"=>$code,":v_status"=>$v_status));
echo 'adminact';
}
}
catch(PDOException $e){
echo "sorry".$e->getMessage();
}
}
我认为这对您来说很好。