私は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 を使用してメールを送信するより良い方法はありますか?