在新用户注册时发送激活电子邮件

时间:2010-05-06 22:06:49

标签: php

以下代码是我正在使用的登录系统。它应该允许新用户注册,然后向新用户发送激活电子邮件。它将新用户插入MySQL数据库,但它没有发送激活电子邮件。有什么想法没有发送激活邮件吗?

提前致谢,

约翰

的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;
    }
}

3 个答案:

答案 0 :(得分:1)

也许是因为发送电子邮件的功能是mail而不是sendMail?如果定义了函数sendMail,则该函数可能存在错误。

答案 1 :(得分:0)

if (mail($email, "Please activate your account.", $message, "no-reply@$domain"))
{
    return true;
} else
{
    return false;
}

答案 2 :(得分:0)

除了需要使用其他人提到的mail功能,这是您的主要问题之外,还有一个小问题:

"no-reply@$domain"

PHP期待一个标题:

"From: no-reply@$domain"

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

这不是你的脚本失败的原因(如上所述,它使用了错误的功能),但遵守标准仍然很重要,否则当你不期望它们时,事情可能会中断。 / p>

相关问题