2010-05-06 32 views
7

El siguiente código es un sistema de acceso que estoy usando. Se supone que permite que un nuevo usuario se registre y luego envía al nuevo usuario un correo electrónico de activación. Está insertando el nuevo usuario en la base de datos MySQL, pero no está enviando el correo electrónico de activación. ¿Alguna idea de por qué no está enviando el correo electrónico de activación?El envío de un correo electrónico de activación cuando un nuevo usuario se registra

Gracias de antemano,

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(); 
} 


?> 

Nueva Función del usuario:

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; 

} 

Enviar función de activación de correo electrónico:

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, "[email protected]$domain")) 
    { 
     return true; 
    } else 
    { 
     return false; 
    } 
} 
+0

@ John. ¿SendMail es una función personalizada o no? De lo contrario, la función para enviar correos electrónicos es el correo como se indica en la respuesta 1. – ggfan

Respuesta

1

Tal vez debido a que la función de envío de correo electrónico es mail y no sendMail? Si se define la función sendMail, tal vez haya un error en esa función.

0
if (mail($email, "Please activate your account.", $message, "[email protected]$domain")) 
{ 
    return true; 
} else 
{ 
    return false; 
} 
0

Además de la necesidad de usar la función mail como han mencionado otros, que es su principal problema, hay un pequeño problema con esto:

"[email protected]$domain" 

PHP está esperando un encabezamiento:

"From: [email protected]$domain" 

o

"Reply-To: [email protected]$domain" 

Ésta no es la razón por la secuencia de comandos está fallando (como se mencionó anteriormente, se trata de utilizar la función equivocada), pero aún así es importante cumplir con las normas o demás cosas pueden romper cuando no se espera que lo hagan.

Cuestiones relacionadas