【问题标题】:PHP mail returns falsePHP 邮件返回 false
【发布时间】:2012-06-07 18:59:51
【问题描述】:

我是 PHP 初学者,刚开始创建自己的网站。我遇到了一个问题,mail() 无缘无故返回 FALSE。

我的想法是实现密码重置机制。当用户输入他的电子邮件时,HTML 表单会将信息传递给 php 脚本,php 脚本将执行验证并通过随机生成的密码重置密码,然后将此临时密码发送到用户电子邮件。以下是我的代码:

<?php
    session_start();
    $email = $_POST['email'];

    function random_string_generator ($character_options, $length_of_generated_string)
    {
        $random_string = "";

        //count the number of characters available for picking
        $num_valid_charactor = strlen($character_options);

        for ( $i = 0 ; $i < $length_of_generated_string; $i++ ){
            $random_pick = mt_rand(1, $num_valid_charactor);
            $random_char = $character_options[$random_pick-1];
            $random_string .= $random_char;
        } 

        return $random_string;
    }

    function createSalt()
    {
        $string = md5(uniqid(rand(), true));
        return substr($string, 0, 3);
    }

    $dbhost = 'localhost';
    $dbname = 'my_db';
    $dbuser = 'root';
    $dbpass = ''; 
    $conn = mysql_connect($dbhost, $dbuser, $dbpass);

    mysql_select_db($dbname, $conn);

    $query = "SELECT password, salt FROM users WHERE email = '$email';";
    $result = mysql_query($query);

    if(mysql_num_rows($result) < 1)
    { //no such user exists
        $_SESSION['error'] = '1';
        $_SESSION['message']    = 'user does not exist';
        header("Location: Forgot_password.php");
    }
    else
    {
        $random_pick_options = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        $temporary_password = random_string_generator($random_pick_options, 12);

        $hash = hash('sha256', $temporary_password);

        $salt = createSalt();
        $hash = hash('sha256', $salt . $hash);      

        $query = "UPDATE users set password=$hash, salt=$salt where email=$email;";
        mysql_query($query);

        //Email user the temporary password
        $email_from = "auto@alemc.org";
        $email_to    = $email;
        $message    = "Dear user,\n\n your temporary passowrd is: " . $temporary_password . "\n This is an auto-generated email. Please do not reply to this email address.\n\n ALEMC\n";

        mail($email_to, "ALEMC: Password Reset", $message, "From: $email_from");

        $_SESSION['message'] = "password reset";
        header("Location: Login_form.php");
    }               
?>

知道有什么问题吗?或者有没有比使用 php 发送邮件更好的方法?

【问题讨论】:

  • 你是在本地主机上运行它吗?即 WAMP 还是 XAMP?
  • 当服务器的后端邮件发送服务未运行或未正确配置时,我通常会收到 mail() 错误。因为看起来你已经正确设置了 PHP,所以我相信是这样的。
  • 你真的应该在你的代码中对 SQL 注入做一些事情,否则你有时会在宇宙中炸出一个洞......
  • 我在本地主机上运行它。我是这方面的初学者。有没有关于设置 SMTP 的教程可以参考?

标签: php


【解决方案1】:

您的 php 设置一定有问题。我个人喜欢在从 php 发送电子邮件时使用PHPMailer,您有更多选择。

【讨论】:

    【解决方案2】:

    我个人建议您使用 swiftmailer (http://swiftmailer.org/) 之类的东西,它可以正常工作。查看您的 PHP 邮件/服务器配置是如何设置的。并采取措施保护自己免受 SQL 注入。

    【讨论】:

      猜你喜欢
      • 2013-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 2018-10-30
      • 2011-09-10
      • 2012-08-27
      • 2013-01-25
      相关资源
      最近更新 更多