PHP mail()问题?

时间:2015-08-22 13:23:40

标签: php email

我有一个没有人尚未解决的问题。

在我的网站上,在注册配置期间,验证码通过邮件发送到用户的电子邮件地址。

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()函数正常工作之前。

编辑:标题没有区别大声笑......

2 个答案:

答案 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或您要使用的任何其他