Вы находитесь на странице: 1из 21

2011

PROYECTO 1
LISTAS DE CORREO

Alumno: Javier Garca Cambronel SEGUNDO DE ASIR 05/12/2011

[PROYECTO 1] 5 de diciembre de 2011

CREANDO NUESTRA BASE DE DATOS MYSQL

CDIGO PHP REGISTRO


COMROBACIN FUNCIONAMIENTO DE NUESTRO CDIGO

DARNOS DE ALTA
DARNOS DE BAJA

CDIGO PHP ENVIO EMAIL

CONFIGURACIN NECESARIA PARA EL ENVIO DE EMAILS

MERCURY
COMPROBACIN DE FUNCIONAMIENTO

SENDMAIL
COMPROBACIN DE FUNCIONAMIENTO

SEGUNDO DE ASIR

Pgina 1

[PROYECTO 1] 5 de diciembre de 2011

CREANDO NUESTRA BASE DE DATOS MYSQL


La creamos con los parmetros que vemos en la siguiente imagen:

Una vez creada podemos ver sus caractersticas con el comando DESC

CDIGO PHP REGISTRO


<?php function doDB() { global $mysqli; //Con esta funcin nos conectamos a la base de datos $mysqli = mysqli_connect("localhost", "root", "", "proyecto"); if (mysqli_connect_errno()) { printf("La conexin ha fallado: %s\n", mysqli_connect_error()); exit(); } } function emailChecker($email) { global $mysqli, $check_res; //Con la siguiente funcin lo que hacemos es comprobar si ese email existe ya en la base de datos $check_sql = "SELECT id FROM usuarios WHERE email = '".$email."'";

SEGUNDO DE ASIR

Pgina 2

[PROYECTO 1] 5 de diciembre de 2011


$check_res = mysqli_query($mysqli, $check_sql) or die(mysqli_error($mysqli)); } //La siguiente funcin es la que vamos a utilizar para validar el email y tiene una serie de restricciones que podemos ver en el cdigo 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 informacin sobre el dominio (.com, .es ...) $term_dom = substr(strrchr ($email, '.'),1); //Y se comprueba que dicho dominio es correcto en cuanto a el tamao, 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; } } } }

SEGUNDO DE ASIR

Pgina 3

[PROYECTO 1] 5 de diciembre de 2011


} 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 pgina una pgina dinmica $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")) {

SEGUNDO DE ASIR

Pgina 4

[PROYECTO 1] 5 de diciembre de 2011


//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 funcin 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 conexin 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>"; } } SEGUNDO DE ASIR Pgina 5

[PROYECTO 1] 5 de diciembre de 2011


} 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 vlido, 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); } SEGUNDO DE ASIR Pgina 6

[PROYECTO 1] 5 de diciembre de 2011


} ?> <html> <head> <title>PROYECTO LISTA DE CORREO</title> </head> <body> <u><h1>REGISTRO DE USUARIOS</h1> <?php echo "$bloque"; ?> </body> </html>

SEGUNDO DE ASIR

Pgina 7

[PROYECTO 1] 5 de diciembre de 2011

COMROBACIN FUNCIONAMIENTO DE NUESTRO CDIGO


DARNOS DE ALTA
Lo primero que vamos a comprobar es si la funcin 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 vlido y un hipervnculo hacia la pgina principal para que volvamos a probar a introducirlo.

SEGUNDO DE ASIR

Pgina 8

[PROYECTO 1] 5 de diciembre de 2011


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 dicindonos que nuestro usuario ha quedado registrado correctamente.

Lo podemos comprobar mirando el contenido de las tablas, como en la imagen que se muestra a continuacin, 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

SEGUNDO DE ASIR

Pgina 9

[PROYECTO 1] 5 de diciembre de 2011

DARNOS DE BAJA
Lo primero que vamos a probar es intentar darnos de baja con un email, que es vlido 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 pgina principal.

SEGUNDO DE ASIR

Pgina 10

[PROYECTO 1] 5 de diciembre de 2011


Ahora probamos con el email, con el que nos habamos registrado anteriormente y le damos a enviar solicitud, una vez hemos seleccionado la opcin de darnos de baja.

Podemos ver como se nos muestra la informacin 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 habamos registrado.

Como podemos ver en la siguiente imagen, la tabla se encuentra vaca.

SEGUNDO DE ASIR

Pgina 11

[PROYECTO 1] 5 de diciembre de 2011

CDIGO 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>Enva tu correo mltiple</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 estn se vuelve a la pgina principal (no confundir con AND) if (($_POST["asunto"] == "") || ($_POST["mensaje"] == "")) { header("Location: envioemail.php"); exit; }

SEGUNDO DE ASIR

Pgina 12

[PROYECTO 1] 5 de diciembre de 2011


//hacemos la conexin a la base de datos $mysqli = mysqli_connect("localhost", "root", "", "proyecto"); if (mysqli_connect_errno()) { //Si la conexin 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 enva el email a todos los correos de la base de datos segn 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); } } ?>

SEGUNDO DE ASIR

Pgina 13

[PROYECTO 1] 5 de diciembre de 2011

CONFIGURACIN 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 enven los correos. Como vemos en la imagen nosotros en esta lista de correo, tenemos dos usuario.

Despus, de que tenemos algunos usuarios en nuestra base de datos vamos a proceder al envo para ello comenzamos a configurar mercury Para ello vamos a la opcin que se encuentra en configuration->protocol modules y marcamos la casilla que vemos en la siguiente imagen.

SEGUNDO DE ASIR

Pgina 14

[PROYECTO 1] 5 de diciembre de 2011


Ahora, lo ms 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 ecriptacin en STARTTLS, si eligiramos solamente SSL el puerto obligatorio sera el 465. 4- Nuestra direccin de email que ser la utilizada para enviar los correos. 5- Nuestra contrasea, la del email que hemos introducido.

SEGUNDO DE ASIR

Pgina 15

[PROYECTO 1] 5 de diciembre de 2011


Despus lo que tenemos que hacer es ir a SMTP Server y una vez all desactivar esa opcin

Nos vamos a la configuracin de PHP, el archivo PHP.INI nosotros como usamos XAMPP lo encontramos en esta ruta:

Y dentro de l descomentamos las lneas necesarias para que nos quede as, :

Una vez hecho esto, como siempre que hagamos cambios en el PHP.INI es necesario REINICIAR APACHE

SEGUNDO DE ASIR

Pgina 16

[PROYECTO 1] 5 de diciembre de 2011

COMPROBACIN 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

SEGUNDO DE ASIR

Pgina 17

[PROYECTO 1] 5 de diciembre de 2011

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 funcin mail con servidores de correo que requieren certificacin para evitar el SPAM (Hotmail,Gmail)

SEGUNDO DE ASIR

Pgina 18

[PROYECTO 1] 5 de diciembre de 2011


En el archivo sendmail.ini descomentar y configurar nuestros parmetros de las siguientes lneas:
[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=nuestracontrasea force_sender=nuestroemail

Ahora en el archivo php.ini entrar y comentar todas las lneas si estaban descomentadas en lo referente al envo de email en Windows y descomentar la que est marcada en la imagen, si, la de Linux pero la versin de sendmail que nos hemos bajado es para Windows asique podemos estar tranquilos.

Una vez configurado todo REINICIAMOS APACHE.

SEGUNDO DE ASIR

Pgina 19

[PROYECTO 1] 5 de diciembre de 2011

COMPROBACIN DE FUNCIONAMIENTO

SEGUNDO DE ASIR

Pgina 20

Вам также может понравиться