Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/06/2007, 03:35
neihs
 
Fecha de Ingreso: octubre-2006
Mensajes: 42
Antigüedad: 17 años, 6 meses
Puntos: 0
Controlar envio de emails con sesiones

Hola a todos!!

Estoy haciendo una página personal, que tiene un apartado para enviarme un email al correo a través de un formulario (así evito colgar mi dirección e-mail en la página).

El caso es que quiero poner un límite de emails por tiempo. Es decir que se pueden enviar por ejemplo 2 emails, pero luego hay que esperar al menos una hora para poder volver a enviar otros dos emails.

Lo hago mediante sesiones. Pero he comprobado que si desabilito las cookies en mi navegador no hay límite de emails... Por lo que todo mi gozo en un pozo.

¿Alguna sugerencia?

Un resumen del código:
Código PHP:
<?php
/* recojo los datos y inicializo variables*/
        
$nombre=$_POST['nombre'];
        
$email=$_POST['email'];
        
$asunto=$_POST['asunto'];
        
$mensaje=$_POST['mensaje'];
        
$error=0/* No hay error*/
        
$_SESSION['eviado']=0/*no se ha enviado ningun mensaje*/
                
/*Quito código html y php*/
        
$nombre=strip_tags($nombre);
        
$email=strip_tags($email);
        
$asunto=strip_tags($asunto);
        
$mensaje=strip_tags($mensaje);
        
        
session_register("numeromails");
        
session_register("nombre");
        
session_register("email");
        
session_register("asunto");
        
session_register("mensaje");
        
session_register("error");
        
session_register("enviado");
        
session_register("fecha-envio"); /*fecha del último envio*/
        
session_register("fecha-nuevo-envio"); /*fecha en la que se puede volver a enviar emails*/
        
/*Si no ha habido ningún envio, la inicializo a 0*/
        
if (!isset($_SESSION['fecha-envio'])) {
            
$_SESSION['fecha-envio'] =0;
        }
        
$hoy=time();
/*recojo la fecha en la que se podrá volver a enviar*/
        
$hasta=$_SESSION['fecha-envio']+$TIEMPOESPERA;
        
$_SESSION['fecha-nuevo-envio']=$hasta/*Para mostrar la fecha en otra página*/
        
        
$pasado=$hoy>=$hasta

/*si la fecha del proximo envio es menor que la de hoy, se resetea en numero de emails enviados*/
        
        
if (!isset($_SESSION['numeromails']) or $pasado){
            
$_SESSION['numeromails']=0;
        }
        
        if (
$_SESSION['numeromails']>$MAXIMOEMAILS){
            
$error=2;    
        }
        }
En este trozo de código recojo los datos, en la sesión se almacena cuando fue la fecha del último envio, si no hubo envio, la fecha se pone a 0. Lo mismo con el número de emails que se han enviado, se ponen a cero cuando ya se puede hacer un nuevo envio.

Y cuando envio el email compruebo que el error sea 0 (hay más comprobaciones):
Código PHP:
$_SESSION['numeromails']++;
            
mail("[email protected]","PPersonal: ".$asunto$mensajecompleto);
            
$_SESSION['enviado']=1;    
            
$_SESSION['fecha-envio']=time(); 
Gracias por dejar que os aburra jeje