21
PROYECTO 1 LISTAS DE CORREO 2011 Alumno: Javier García Cambronel SEGUNDO DE ASIR 05/12/2011

Proyecto: Envio de correo multiple mediante PHP

Tags:

Embed Size (px)

DESCRIPTION

2011PROYECTO 1LISTAS DE CORREOAlumno: Javier García Cambronel SEGUNDO DE ASIR 05/12/2011[PROYECTO 1] 5 de diciembre de 2011CREANDO NUESTRA BASE DE DATOS MYSQLCÓDIGO PHP REGISTROCOMROBACIÓN FUNCIONAMIENTO DE NUESTRO CÓDIGODARNOS DE ALTADARNOS DE BAJACÓDIGO PHP ENVIO EMAILCONFIGURACIÓN NECESARIA PARA EL ENVIO DE EMAILSMERCURYCOMPROBACIÓN DE FUNCIONAMIENTOSENDMAILCOMPROBACIÓN DE FUNCIONAMIENTOSEGUNDO DE ASIRPágina 1[PROYECTO 1] 5 de diciembre de 2011CREANDO NUESTR

Citation preview

Page 1: Proyecto: Envio de correo multiple mediante PHP

PROYECTO 1 LISTAS DE CORREO

2011

Alumno: Javier García Cambronel SEGUNDO DE ASIR

05/12/2011

Page 2: Proyecto: Envio de correo multiple mediante PHP

[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

Page 3: Proyecto: Envio de correo multiple mediante PHP

[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."'";

Page 4: Proyecto: Envio de correo multiple mediante PHP

[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;

}

}

}

}

Page 5: Proyecto: Envio de correo multiple mediante PHP

[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")) {

Page 6: Proyecto: Envio de correo multiple mediante PHP

[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>";

}

}

Page 7: Proyecto: Envio de correo multiple mediante PHP

[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);

}

Page 8: Proyecto: Envio de correo multiple mediante PHP

[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>

Page 9: Proyecto: Envio de correo multiple mediante PHP

[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.

Page 10: Proyecto: Envio de correo multiple mediante PHP

[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

Page 11: Proyecto: Envio de correo multiple mediante PHP

[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.

Page 12: Proyecto: Envio de correo multiple mediante PHP

[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.

Page 13: Proyecto: Envio de correo multiple mediante PHP

[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;

}

Page 14: Proyecto: Envio de correo multiple mediante PHP

[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 <[email protected]>";

//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);

}

}

?>

Page 15: Proyecto: Envio de correo multiple mediante PHP

[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.

Page 16: Proyecto: Envio de correo multiple mediante PHP

[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.

Page 17: Proyecto: Envio de correo multiple mediante PHP

[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

Page 18: Proyecto: Envio de correo multiple mediante PHP

[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

Page 19: Proyecto: Envio de correo multiple mediante PHP

[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…)

Page 20: Proyecto: Envio de correo multiple mediante PHP

[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.

Page 21: Proyecto: Envio de correo multiple mediante PHP

[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