我有一个没有人尚未解决的问题。
在我的网站上,在注册配置期间,验证码通过邮件发送到用户的电子邮件地址。
mail()
功能以外的所有功能都正常运行。
这是我的整个PHP注册码:
$code = md5(uniqid($safe_email,true));
$email = $_POST['email'];
$he_email = htmlentities($email);
$safe_email = mysql_real_escape_string($he_email);
if(isset($r_submit))
{
//SQL
$email_query = "SELECT email FROM users WHERE email = '$safe_email'";
$email_queried = mysql_query($email_query);
$email_count = mysql_num_rows($email_queried);
//VALIDATION
$errors = array();
if( empty($safe_fname) || empty($safe_lname) || empty($safe_email) || empty($safe_email_again) || empty($safe_password) )
{ $errors = '<p>One or more fields left empty'; }
elseif( strlen($safe_password) < 6){ $errors = '<p>Password must be atleast 6 charcters long.</p>'; }
elseif ( !preg_match('/@/',$safe_email) || !preg_match('/@/',$safe_email_again) ) {$errors = '<p>Invalid E-mail</p>';}
elseif($safe_email != $safe_email_again){ $errors = '<p>E-mails do not match.</p>'; }
elseif($email_count != 0){ $errors = '<p>E-mail already in use.</p>'; }
//Inserting new data in database
else{ $sql1 = "INSERT INTO users (fname, lname, full_name, veri_id, email, password )
VALUES ('$safe_fname','$safe_lname','$full_name', '$code', '$safe_email', '$hash_password')";
$sql2 = mysql_query($sql1);
//The mail function that isn't working
$msg = "Verify Link => http://www.nljobmarket.com/verify.php?code=$code";
mail($safe_email,'Welcome',$msg);
header('Location: ../just_registered.php');
}
}
正如您所看到的,正在通过mail()
函数传递适当的参数,但电子邮件不正在发送(我已尝试使用3个不同的电子邮件帐户)
我的问题是:为什么用户不接收包含验证码的电子邮件?
注意::数据库查询mail()
函数正常工作之前。
编辑:标题没有区别大声笑......
答案 0 :(得分:1)
首先,除了邮件之外的所有内容当前都在工作,但是一旦您的Web主机更新到PHP 7,您的代码就会失败.mysql_anyfunction()是一种连接到数据库的折旧方法,它们的功能将在upcomming版本中删除。而是使用mysqli或首选方法PDO,因为你的&#34; $ safe_email&#34;并不是那么安全。
然后有你的电子邮件验证工具,你应该使用:
echo filter_var($address, FILTER_VALIDATE_EMAIL) ? 'valid' : 'invalid';
检查用户的电子邮件地址是否格式正确。
然后是你的邮件功能,它缺少标题。
$to = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "\r\n" .
'Reply-To: webmaster@example.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
if(mail($to, $subject, $message, $headers)){
// all data is valid and email should be send.
} else {
// invalid data, somewhere.. email is not being send.
}
如果你不发送带有邮件功能的标题,它可能只是被当作垃圾邮件。
你也可以使用PHPMailer或我提供的一个SwiftMailer。
答案 1 :(得分:0)
这是格式正确的电子邮件的示例
$from = "app@mailcomingfrom.com";
$subject = "Password validation";
$messaggio ="Your message";
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'To: User <user@mailgoingto.com>' . "\r\n";
$headers .= 'From: Your App <app@mailcomingfrom.com>' . "\r\n";
mail("user@mailgoingto.com",$subject,$messaggio,$headers);
如果提供商设置了SMTP服务器,并且有一条规则允许app@mailcomingfrom.com在没有身份验证的情况下发送邮件,则此代码将起作用,而大多数共享主机服务都不会这样。 如果要应用身份验证,您需要添加相关的授权行,或依赖于已为此设置的适当库,如PHPMailer或您要使用的任何其他