如何向新注册用户发送确认电子邮件?

时间:2013-03-02 08:28:47

标签: php mysql

我想向新注册用户发送确认电子邮件,其用户名我有代码,所有细节都插入到我正在处理的mysql数据库中,但它没有向注册用户发送电子邮件

<?php
$email=$_SESSION['email'];
if(!$_SESSION['email'] || $_SESSION['email']){
header('Location:login.php');
}
if(isset($_REQUEST['signup'])){
$signup=$_POST['signup'];   
$username=$_POST['username'];
$password=$_POST['password'];
$fname=$_POST['fname'];
$lname=$_POST['lname'];
$gender=$_POST['gender'];
$datepicker=$_POST['datepicker'];
$email=$_POST['email'];
$phone=$_POST['phone'];
$address=$_POST['address'];
$country=$_POST['country'];
$city=$_POST['city'];

$validemail = eregi("^[a-z0-9_-]+(\.[a-z0-9_-]+)*@([a-z0-9_-]+\.)*[a-z0-9_-]+\.[a-z]{2,}$", $email); //VALID EMAIL PATTERN

 //CHECKS IF ALL FIELDS HAVE BEEN FILLED
 if($username&&$password&&$fname&&$lname){
 //CHECKS IF EMAIL IS VALID
 if($validemail){
 $q = mysql_query("SELECT * FROM customers WHERE email='$email'");
 $r = mysql_fetch_assoc($q);
 $n = mysql_num_rows($q);
//CHECKS IF EMAIL ALREADY EXISTS IN THE DATABASE
if(!$n){
$q = mysql_query("SELECT * FROM customers WHERE username='$username'");
$r = mysql_fetch_assoc($q);
$n = mysql_num_rows($q);
//CHECKS IF USERNAME ALREADY EXISTS IN THE DATABASE
if(!$n){
//CHECKS IF THE PASSWORD AND CONFIRMATION PASSWORD MATCH
if($password){
//IF ALL CONDITIONS ARE TRUE, THE USER IS REGISTERED AND AN ACTIVATION KEY IS PROCESSED   AND SENT VIA EMAIL
$alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
$length = 11;
for($i=0; $i<$length; $i++){
$ran = rand(0, strlen($alpha)-1);
$key .= substr($alpha, $ran, 1);
}
//SENDS EMAIL THAT TELLS THE USER TO ACTIVATE THE ACCOUNT
$activation = 'activation.php?key='.$key;
$your_email = 'non-reply@mydomain.com'; //CHANGE TO YOUR SETTINGS
$domain = $_SERVER["HTTP_HOST"]; //YOUR DOMAIN AND EXTENSION
$to = $email;
$subject = 'Activate Account';
$message = 'Welcome, '.$_POST['username'].'. You must activate your account via this message to log in. Click the following link to do so: http://'.$domain.'/'.$activation;
$headers = 'From: My Domain <'.$your_email.'@'.$domain.'>\r\n'; //MODIFY TO YOUR SETTINGS
$headers .= 'Content-type: text/html\r\n';
mail($to, $subject, $message, $headers);
}
}}}}

$sqlquery=mysql_query("INSERT INTO customers   VALUE('','$username','$password','$fname','$lname',
'$gender','$datepicker','$email','$phone','$address','$country','$city','','$key','')")or  die("Error");


 if ($sqlquery)
 {

 header('location:index.php?id=signup-confirmation');
 }
 else {
 header('location:signup.php');
 }
 } 

 ?>

2 个答案:

答案 0 :(得分:0)

首先,按照你的期望,你能回应吗?

要检查的第二件事是查看是否在php.ini文件中的服务器上正确设置了mail()设置,或者在执行mail()之前调用ini_set用于各种mail()参数。

如果您不拥有该服务器,请与所有者联系并询问是否已启用mail()。

有些主机已将其禁用以防止发送垃圾邮件等.PREAR邮件比mail()更受欢迎,因为它支持身份验证等内容。

答案 1 :(得分:0)

两个问题:

首先,@标题中有From:个字符过多。你这样做:

$your_email = 'non-reply@mydomain.com';

然后你做

$headers = 'From: My Domain <'.$your_email.'@'.$domain'>\r\n'

因此,这将导致non-reply@mydomain.com@$domain

其次,在分配$headers时需要使用双引号,因为\r\n转义序列不会用单引号解释。