Отправка электронного письма Активации, когда Новый Пользователь Регистры

Код ниже является системой входа в систему, которую я использую. Это, как предполагается, позволяет новому пользователю регистрировать и затем посылать новому пользователю электронное письмо активации. Это вводит нового пользователя в базу данных MySQL, но это не посылает электронное письмо активации. Какие-либо идеи, почему это не посылает электронное письмо активации?

Заранее спасибо,

John

header.php:

<?php
//error_reporting(0); 
session_start();
require_once ('db_connect.inc.php'); 
require_once ("function.inc.php"); 
$seed="0dAfghRqSTgx"; 
$domain =  "...com"; 


?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>The Sandbox - <?php echo $domain; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="sandbox.css"> 
<div class="hslogo"><a href="http://www...com/sandbox/"><img src="images/hslogo.png" alt="Example" border="0"/></a></div>
</head>
<body>

login.php:

<?php
if (!isLoggedIn())
{
    // user is not logged in.
    if (isset($_POST['cmdlogin']))
    {
        // retrieve the username and password sent from login form & check the login.
        if (checkLogin($_POST['username'], $_POST['password']))
        {
            show_userbox();
        } else
        {
            echo "Incorrect Login information !";
            show_loginform();
        }
    } else
    {
        // User is not logged in and has not pressed the login button
        // so we show him the loginform
        show_loginform();
    }

} else
{
    // The user is already loggedin, so we show the userbox.
    show_userbox();
}
?>


function show_loginform($disabled = false)
{

    echo '<form name="login-form" id="login-form" method="post" action="./index.php?'.$_SERVER['QUERY_STRING'].'"> 

    <div class="usernameformtext"><label title="Username">Username: </label></div> 
    <div class="usernameformfield"><input tabindex="1" accesskey="u" name="username" type="text" maxlength="30" id="username" /></div> 


    <div class="passwordformtext"><label title="Password">Password: </label></div> 
    <div class="passwordformfield"><input tabindex="2" accesskey="p" name="password" type="password" maxlength="15" id="password" /></div> 


    <div class="registertext"><a href="http://www...com/sandbox/register.php" title="Register">Register</a></div> 
    <div class="lostpasswordtext"><a href="http://www...com/sandbox/lostpassword.php" title="Lost Password">Lost password?</a></div> 

  <p class="loginbutton"><input tabindex="3" accesskey="l" type="submit" name="cmdlogin" value="Login" ';
    if ($disabled == true)
    {
        echo 'disabled="disabled"';
    }
    echo ' /></p></form>';


}

register.php:

<?php

require_once "header.php"; 

if (isset($_POST['register'])){

    if (registerNewUser($_POST['username'], $_POST['password'], $_POST['password2'], $_POST['email'])){

        echo "<div class='registration'>Thank you for registering, an email has been sent to your inbox, Please activate your account.
        <a href='http://www...com/sandbox/index.php'>Click here to login.</a>
        </div>";

    }else {

        echo "Registration failed! Please try again.";
        show_registration_form();

    }

} else {
// has not pressed the register button
    show_registration_form();   
}


?>

Новая функция пользователя:

function registerNewUser($username, $password, $password2, $email)
{

    global $seed;

    if (!valid_username($username) || !valid_password($password) || 
            !valid_email($email) || $password != $password2 || user_exists($username))
    {
        return false;
    }


    $code = generate_code(20);
    $sql = sprintf("insert into login (username,password,email,actcode) value ('%s','%s','%s','%s')",
        mysql_real_escape_string($username), mysql_real_escape_string(sha1($password . $seed))
        , mysql_real_escape_string($email), mysql_real_escape_string($code));


    if (mysql_query($sql))
    {
        $id = mysql_insert_id();

        if (sendActivationEmail($username, $password, $id, $email, $code))
        {

            return true;
        } else
        {
            return false;
        }

    } else
    {
        return false;
    }
    return false;

}

Отправьте почтовую функцию Активации:

function sendActivationEmail($username, $password, $uid, $email, $actcode)
{
    global $domain;
    $link = "http://www.$domain/sandbox/activate.php?uid=$uid&actcode=$actcode";
    $message = "
Thank you for registering on http://www.$domain/,

Your account information:

username:  $username
password:  $password

Please click the link below to activate your account.

$link

Regards
$domain Administration
";

    if (sendMail($email, "Please activate your account.", $message, "no-reply@$domain"))
    {
        return true;
    } else
    {
        return false;
    }
}
7
задан John 6 May 2010 в 22:06
поделиться

3 ответа

Может быть, потому что функция отправки электронной почты - mail , а не sendMail? Если функция sendMail определена, возможно, в этой функции есть ошибка.

1
ответ дан 7 December 2019 в 20:34
поделиться
if (mail($email, "Please activate your account.", $message, "no-reply@$domain"))
{
    return true;
} else
{
    return false;
}
0
ответ дан 7 December 2019 в 20:34
поделиться

В дополнение к необходимости использовать функцию mail как упоминалось другими, что является вашей основной проблемой, есть небольшая проблема:

"no-reply@$domain"

PHP ожидает заголовок:

"From: no-reply@$domain"

или

"Reply-To: no-reply@$domain"

Это не является причиной сбоя вашего скрипта (как упоминалось выше, он использует неправильную функцию), но все же важно соблюдать стандарты, иначе все может сломаться, когда вы этого не ожидаете.

0
ответ дан 7 December 2019 в 20:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: