Post on 30-Oct-2014
description
transcript
PROYECTO 1 LISTAS DE CORREO
2011
Alumno: Javier García Cambronel SEGUNDO DE ASIR
05/12/2011
[PROYECTO 1] 5 de diciembre de 2011
S E G U N D O D E A S I R
Página 1
CREANDO NUESTRA BASE DE DATOS MYSQL
CÓDIGO PHP REGISTRO
COMROBACIÓN FUNCIONAMIENTO DE NUESTRO CÓDIGO
DARNOS DE ALTA
DARNOS DE BAJA
CÓDIGO PHP ENVIO EMAIL
CONFIGURACIÓN NECESARIA PARA EL ENVIO DE EMAILS
MERCURY
COMPROBACIÓN DE FUNCIONAMIENTO
SENDMAIL
COMPROBACIÓN DE FUNCIONAMIENTO
[PROYECTO 1] 5 de diciembre de 2011
S E G U N D O D E A S I R
Página 2
CREANDO NUESTRA BASE DE DATOS MYSQL
La creamos con los parámetros que vemos en la siguiente imagen:
Una vez creada podemos ver sus características con el comando DESC
CÓDIGO PHP REGISTRO
<?php
function doDB() {
global $mysqli;
//Con esta función nos conectamos a la base de datos
$mysqli = mysqli_connect("localhost", "root", "", "proyecto");
if (mysqli_connect_errno()) {
printf("La conexión ha fallado: %s\n", mysqli_connect_error());
exit();
}
}
function emailChecker($email) {
global $mysqli, $check_res;
//Con la siguiente función lo que hacemos es comprobar si ese email existe ya en la base de
datos
$check_sql = "SELECT id FROM usuarios WHERE email = '".$email."'";
[PROYECTO 1] 5 de diciembre de 2011
S E G U N D O D E A S I R
Página 3
$check_res = mysqli_query($mysqli, $check_sql) or die(mysqli_error($mysqli));
}
//La siguiente función es la que vamos a utilizar para validar el email y tiene una serie de
restricciones que podemos ver en el código
function comprobar_email($email){
//Por defecto la variable vale 0
$mail_correcto = 0;
if ((strlen($email) >= 6) && (substr_count($email,"@") == 1) && (substr($email,0,1) != "@")
&& (substr($email,strlen($email)-1,1) != "@")){
if ((!strstr($email,"'")) && (!strstr($email,"\"")) && (!strstr($email,"\\")) &&
(!strstr($email,"\$")) && (!strstr($email," "))) {
if (substr_count($email,".")>= 1){
//Se obtiene información sobre el dominio (.com, .es ...)
$term_dom = substr(strrchr ($email, '.'),1);
//Y se comprueba que dicho dominio es correcto en cuanto a el tamaño, maximo 4 y
minimo 2 caracteres
if (strlen($term_dom)>1 && strlen($term_dom)<5 &&
(!strstr($term_dom,"@")) ){
//Se comprueba que tiene @
$antes_dom = substr($email,0,strlen($email) -
strlen($term_dom) - 1);
$caracter_ult = substr($antes_dom,strlen($antes_dom)-1,1);
if ($caracter_ult != "@" && $caracter_ult != "."){
$mail_correcto = 1;
}
}
}
}
[PROYECTO 1] 5 de diciembre de 2011
S E G U N D O D E A S I R
Página 4
}
if ($mail_correcto) {
return 1;
} else {
return 0;
}
}
//Con esto seteamos para que se muestre o no el formulario
if (!$_POST) {
//Creamos la variable bloque que hará de nuestra página una página dinámica
$bloque = "
<form method=\"POST\" action=\"".$_SERVER["PHP_SELF"]."\">
<p><strong>Nombre:</strong><br/>
<input type=\"text\" name=\"nombre\" size=\"20\">
<p><strong>Apellidos:</strong><br/>
<input type=\"text\" name=\"apellidos\" size=\"150\">
<p><strong>email:</strong><br/>
<input type=\"text\" name=\"email\" size=\"150\">
<p><strong>¿Que desea hacer?</strong><br/>
<input type=\"radio\" name=\"action\"
value=\"insc\" checked> Inscribirse
<input type=\"radio\" name=\"action\"
value=\"out\"> Darse de baja
<p><input type=\"submit\" name=\"enviar\"
value=\"Enviar Solicitud\"></p>
</form>";
} else if (($_POST) && ($_POST["action"] == "insc")) {
[PROYECTO 1] 5 de diciembre de 2011
S E G U N D O D E A S I R
Página 5
//Nos inscribimos comprobando que nuestro correo sea correcto
if($_POST["email"] == "") {
header("Location: proyecto.php");
exit;
} else if (comprobar_email($_POST["email"]) == FALSE) {
$bloque = "<p><strong>Tu email no es valido</strong></p>
<a href=proyecto.php>Volver a intentarlo</a>";
} else {
//nos conectamos a la base de datos con la función dedicada a ello
doDB();
//comprobamos si el email está en la lista
emailChecker($_POST["email"]);
if (mysqli_num_rows($check_res) < 1) {
mysqli_free_result($check_res);
//introducimos los datos en nuestra base de datos y en la tabla especificada
$add_sql = "INSERT INTO usuarios (nombre,apellidos,email)
VALUES('".$_POST["nombre"]."','".$_POST["apellidos"]."','".$_POST["email"]."')";
$add_res = mysqli_query($mysqli, $add_sql) or die(mysqli_error($mysqli));
$bloque = "<p>Bienvenido a nuestra lista de
correo:<u><b>".$_POST["nombre"].$_POST["apellidos"]."</b></u></p>";
//Cerramos la conexión
mysqli_close($mysqli);
} else {
//si ya estamos en la base de datos nos da error
$bloque = "<p>El email <u><b>".$_POST["email"]."</u></b> ya aparece registrado
<u><b>".$_POST["nombre"]."</b></u></p>";
}
}
[PROYECTO 1] 5 de diciembre de 2011
S E G U N D O D E A S I R
Página 6
} else if (($_POST) && ($_POST["action"] == "out")) {
//para darse de baja
if ($_POST["email"] == "") {
header("Location: proyecto.php");
exit;
} else {
doDB();
//Se comprueba el email para borrarlo
emailChecker($_POST["email"]);
if (mysqli_num_rows($check_res) < 1) {
mysqli_free_result($check_res);
//Si no se encuentra, muestra el mensaje de error
$bloque = "<p>El email <u><b>".$_POST["email"]."</u></b> no es válido, no está en
nuestra lista de correo
<u><b>".$_POST["nombre"]."</b></u>
<p>Puedes volver a intentarlo si lo deseas</p>";
} else {
//recuperamos el Id para localizar el correo y borrarlo
while ($row = mysqli_fetch_array($check_res)) {
$id = $row["id"];
}
$del_sql = "DELETE FROM usuarios WHERE id = '".$id."'";
$del_res = mysqli_query($mysqli, $del_sql) or die(mysqli_error($mysqli));
$bloque = "<p>Ya no estas en nuestra lista de correo:
<u><b>".$_POST["nombre"].$_POST["apellidos"]."</b></u></p>";
}
mysqli_close($mysqli);
}
[PROYECTO 1] 5 de diciembre de 2011
S E G U N D O D E A S I R
Página 7
}
?>
<html>
<head>
<title>PROYECTO LISTA DE CORREO</title>
</head>
<body>
<u><h1>REGISTRO DE USUARIOS</h1>
<?php echo "$bloque"; ?>
</body>
</html>
[PROYECTO 1] 5 de diciembre de 2011
S E G U N D O D E A S I R
Página 8
COMROBACIÓN FUNCIONAMIENTO DE NUESTRO
CÓDIGO
DARNOS DE ALTA
Lo primero que vamos a comprobar es si la función comprobar_email de nuestro registro,
funciona correctamente, para ello introducimos un email que no debe de pasar las
restricciones que nosotros le hemos introducido, en este caos, porque falta la @
Como vemos en la siguiente imagen nos aparece el error de que el email introducido no es
válido y un hipervínculo hacia la página principal para que volvamos a probar a introducirlo.
[PROYECTO 1] 5 de diciembre de 2011
S E G U N D O D E A S I R
Página 9
Ahora lo que hacemos es introducir un email valido, para que pase todas las restricciones y
así poder realizar el registro correctamente.
Como vemos en cuanto enviamos la solicitud nos aparece un mensaje diciéndonos que
nuestro usuario ha quedado registrado correctamente.
Lo podemos comprobar mirando el contenido de las tablas, como en la imagen que se
muestra a continuación, o accediendo a nuestra base de datos mediante el modo comando.
Si intentamos volver a inscribirnos con el mismo email, no podemos y se nos muestra el
siguiente mensaje de advertencia
[PROYECTO 1] 5 de diciembre de 2011
S E G U N D O D E A S I R
Página 10
DARNOS DE BAJA
Lo primero que vamos a probar es intentar darnos de baja con un email, que es válido pero
que no se encuentra en nuestra base de datos.
Como vemos nos manda el mensaje de error diciendo que el email no está en nuestra lista
de correo y que por eso no podemos darnos de baja, y abajo un enlace para que probemos
de nuevo desde la página principal.
[PROYECTO 1] 5 de diciembre de 2011
S E G U N D O D E A S I R
Página 11
Ahora probamos con el email, con el que nos habíamos registrado anteriormente y le damos
a enviar solicitud, una vez hemos seleccionado la opción de darnos de baja.
Podemos ver como se nos muestra la información de que nuestra solicitud, en este caso
darnos de baja a tenido éxito y se nos ha borrado de la base de datos Usuarios donde nos
habíamos registrado.
Como podemos ver en la siguiente imagen, la tabla se encuentra vacía.
[PROYECTO 1] 5 de diciembre de 2011
S E G U N D O D E A S I R
Página 12
CÓDIGO PHP ENVIO EMAIL
<?php
//La primera vez que entramos muestra el formulario de entrada
if (!$_POST) {
echo "<html>
<head>
<title>Correo</title>
</head>
<body>
<h1>Envía tu correo múltiple</h1>
<form method=\"POST\" action=\"".$_SERVER["PHP_SELF"]."\">
<p><strong>Asunto:</strong><br/>
<input type=\"text\" name=\"asunto\" size=\"30\"></p>
<p><strong>Mensaje:</strong><br/>
<textarea name=\"mensaje\" cols=\"50\" rows=\"10\"
wrap=\"virtual\"></textarea>
<p><input type=\"submit\" name=\"enviar\" value=\"Enviar \"></p>
</form>
</body>
</html>";
} else if ($_POST) {
//Se comprueba que no esten vacios, y si lo están se vuelve a la página principal (no
confundir con AND)
if (($_POST["asunto"] == "") || ($_POST["mensaje"] == "")) {
header("Location: envioemail.php");
exit;
}
[PROYECTO 1] 5 de diciembre de 2011
S E G U N D O D E A S I R
Página 13
//hacemos la conexión a la base de datos
$mysqli = mysqli_connect("localhost", "root", "", "proyecto");
if (mysqli_connect_errno()) {
//Si la conexión falla nos muestra el mensaje y el error correspondiente
printf("No se ha podido realizar la conexion: %s\n", mysqli_connect_error());
exit();
} else {
//Obtenemos los emails de nuestra base de datos, de la tabla "usuarios"
$sql = "SELECT email FROM usuarios";
$resultado = mysqli_query($mysqli, $sql) or die(mysqli_error($mysqli));
//Almacenamos la cabecera en una variable
$cabecera = "Mensaje enviado desde <javiergarciacambronel@gmail.com>";
//Se crea un bucle que envía el email a todos los correos de la base de datos según la
recorra
while ($row = mysqli_fetch_array($resultado)) {
set_time_limit(0);
$email = $row["email"];
mail($email, stripslashes($_POST["asunto"]), stripslashes($_POST["mensaje"]), $cabecera);
echo "El mensaje ha sido enviado a: ".$email."<br/>";
}
mysqli_free_result($resultado);
mysqli_close($mysqli);
}
}
?>
[PROYECTO 1] 5 de diciembre de 2011
S E G U N D O D E A S I R
Página 14
CONFIGURACIÓN NECESARIA PARA EL ENVIO DE EMAILS
MERCURY
Lo primero que tenemos que tener, claramente son algunos usuarios con su email
registrados, pues van a ser los usuarios a los que se les envié o envíen los correos.
Como vemos en la imagen nosotros en esta lista de correo, tenemos dos usuario.
Después, de que tenemos algunos usuarios en nuestra base de datos vamos a proceder al
envío para ello comenzamos a configurar mercury
Para ello vamos a la opción que se encuentra en configuration->protocol modules y
marcamos la casilla que vemos en la siguiente imagen.
[PROYECTO 1] 5 de diciembre de 2011
S E G U N D O D E A S I R
Página 15
Ahora, lo más seguro qye nos toque parar mercury y volverlo a iniciar para que cuando
entremos en configuration-> MercuryC SMTP Relay Client Configuration nos salga esta
ventana la configuramos del siguiente modo
1- Ponemos el nombre de nuestro servidor de correo, en este caso al utilizar una cuenta
gmail smtp.gmail.com.
2- Aquí debemos especificar el puerto que se utilizara, como nuestra cuenta esta
configurada para gmail podemos utilizar tanto el puerto 587 que hemos puesto
nosotros, como el puerto 465.
3- Seleccionamos el tipo de ecriptación en STARTTLS, si eligiéramos solamente SSL el
puerto obligatorio sería el 465.
4- Nuestra dirección de email que será la utilizada para enviar los correos.
5- Nuestra contraseña, la del email que hemos introducido.
[PROYECTO 1] 5 de diciembre de 2011
S E G U N D O D E A S I R
Página 16
Después lo que tenemos que hacer es ir a SMTP Server y una vez allí desactivar esa opción
Nos vamos a la configuración de PHP, el archivo PHP.INI nosotros como usamos XAMPP lo
encontramos en esta ruta:
Y dentro de él descomentamos las líneas necesarias para que nos quede así, :
Una vez hecho esto, como siempre que hagamos cambios en el PHP.INI es necesario
REINICIAR APACHE
[PROYECTO 1] 5 de diciembre de 2011
S E G U N D O D E A S I R
Página 17
COMPROBACIÓN DE FUNCIONAMIENTO
Escribimos el mensaje que queremos y pulsamos en enviar.
Nos dice que el email se ha enviado correctamente
Y comprobamos si nos ha llegado y vemos que es cierto, lo hemos recibido y sin estar en la
carpeta de NO deseados sino, que directamente los encontramos en nuestra bandeja de
entrada
[PROYECTO 1] 5 de diciembre de 2011
S E G U N D O D E A S I R
Página 18
SENDMAIL
Nos vamos a la ruta donde está sendmail, por defecto la que vemos en la imagen inferior
Abrimos el archivo readme.html y descargamos el archivo que está en el enlace
Lo descomprimimos en la carpeta sendmail y sobrescribiremos los archivos para que
funcione la función mail con servidores de correo que requieren certificación para evitar el
SPAM (Hotmail,Gmail…)
[PROYECTO 1] 5 de diciembre de 2011
S E G U N D O D E A S I R
Página 19
En el archivo sendmail.ini descomentar y configurar nuestros parámetros de las siguientes
líneas:
[sendmail]
smtp_server=smtp.gmail.com (para gmail) smtp.live.com(para Hotmail)
smtp_port=25
error_logfile=error.log
debug_logfile=debug.log
auth_username=nuestroemail
auth_password=nuestracontraseña
force_sender=nuestroemail
Ahora en el archivo php.ini entrar y comentar todas las líneas si estaban descomentadas en
lo referente al envío de email en Windows y descomentar la que está marcada en la imagen,
si, la de Linux pero la versión de sendmail que nos hemos bajado es para Windows asique
podemos estar tranquilos.
Una vez configurado todo REINICIAMOS APACHE.
[PROYECTO 1] 5 de diciembre de 2011
S E G U N D O D E A S I R
Página 20
COMPROBACIÓN DE FUNCIONAMIENTO