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 に答える