1

我是 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 发送邮件更好的方法?

4

2 回答 2

2

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

于 2012-06-07T19:16:03.237 回答
0

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

于 2012-06-07T19:26:33.213 回答