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

Php 如何向新注册用户发送确认电子邮件?,php,mysql,Php,Mysql,我想发送确认电子邮件给新注册的用户和他们的用户名我有代码,所有细节都插入到mysql数据库我正在工作,但它不发送电子邮件给注册用户 <?php $email=$_SESSION['email']; if(!$_SESSION['email'] || $_SESSION['email']){ header('Location:login.php'); } if(isset($_REQUEST['signup'])){ $signup=$_POST['signup']; $usernam

我想发送确认电子邮件给新注册的用户和他们的用户名我有代码,所有细节都插入到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');
 }
 } 

 ?>

首先,美元会像你期望的那样产生共鸣吗

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

如果您不拥有服务器,请联系所有者并询问是否启用了邮件

某些主机已禁用它以防止垃圾邮件等。PEAR Mail比Mail更受欢迎,因为它支持身份验证等功能。

两个问题:

首先,您的From:头中的@字符太多。你可以:

$your_email = 'non-reply@mydomain.com';
然后你就这么做了

$headers = 'From: My Domain <'.$your_email.'@'.$domain'>\r\n'
因此,这将导致-reply@mydomain.com@$domain


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

有错误吗?您是否检查了系统中发送邮件的smtp配置?$your_email='非-reply@mydomain.com'; //更改您的设置$domain=$\u服务器[HTTP\u主机]//您的域和扩展应该设置服务器配置。是否检查了邮件服务器设置的php.ini设置。另外,请检查您的服务器日志文件以了解更多详细信息。请使用我的webmailinfo@mydomain.com我不知道我哪里做错了…@CuriousMind我通过mydomain.com发送电子邮件我没有在本地主机上测试电子邮件昨晚我的代码正常工作,但今天它不正常我不知道我在代码中哪里做错了?@Farhan Dharsi你在@Barmar发布的网站上做了更改?