Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/09/2010, 04:47
neobcn
 
Fecha de Ingreso: agosto-2009
Ubicación: $this->home = "BCN";
Mensajes: 9
Antigüedad: 15 años, 4 meses
Puntos: 0
función mail() de php repetitiva

Saludos amigos de foros del web:

Estoy desquiciado con un tema de la función mail(), que me lleva peleando más de seis horas y sigo sin dar con la solución.

El caso es que me envia los emails correctamente, respetando todo el formato, el destinatario, etc.. Peeeero, la muy jodida, me envia los emails 4 veces segudas sin demora de tiempo.

He leido en algún post ya publicado, que puede ser debido a diferentes problemas o aspectos:

Uno: "las cabeceras o headers del email": Negativo con y sin ellas el problema persiste.

Dos: "tener la función mail() en un bucle": Negativo, esta en un metodo de una clase sin bucles.

Tres: "configuración del smtp del servidor": Negativo, según conversación telefonica con el servicio técnico, se debe a un error de programación.

Solo me queda pensar un error de mi planteamiento logico en el codigo, pero la verdad es que después de seis horas de pruebas, revisiones, cafes y cigarrillos, sigo sin encontrar el bug del maldito problema.

Aquí os muestro mi código:

Código PHP:
// Por un lado, tengo este método para según las variables recibidas, mostrar el formulario de contacto, o bien la página de confirmación del envio, o bien el mensaje de error o éxito en el envio de los emails depués de haber intentado realizar el envio
public function ConfirmaDades()
    {
        
// Si no s'ha rebut l'acciò de enviar el formulari ni de confirmació de dades
        
if($this->formulari == "" && $this->confirmacio == "")
        {
            
// Mostro el formulari
            
$this->accio $this->SolicitudInformacio();
        }
        
// Si no, si ja s'ha rebut l'acció de enviar i encara no s'han confirmat les dades
        
elseif($this->formulari == "0" && $this->confirmacio == "")
        {
            
// Procedeixo a mostrar les dades a enviar per a confirmar per part de l'usuari
            
$this->accio $this->ComprobaDades();
        }
        
// Si s'ha enviat el formulari i ja s'han confirmat les dades
        
elseif($this->clau == "enviar")
        {
            
// Envio emails al servidor i a la safata d'entrada de l'usuari
            
$this->EnviaEmailServidor();
            
$this->EnviaEmailResposta();
            
$this->accio $this->Missatge();
        }
        return 
$this->accio;
    }
//  A continuación os muestro los métodos que generan los envios de los emails a servidor y usuario

// Este es el que envia los datos del formulario al servidor
public function EnviaEmailServidor()
    {
        
$destinatari "[email protected]";
        
$capsaleres "MIME-Version: 1.0" "\r\n";
        
$capsaleres .= "Content-type: text/html; charset=iso-8859-1\r\n";
        
$capsaleres .= "From: ".$_SESSION["email"]."\r\n";
        
$titol "Sol.licitud de informació via web";
        
$emailRemitent $_SESSION["email"];
        
$nomRemitent $_SESSION["nom"];
        
$cognom1Remitent $_SESSION["cognom1"];
        
$cognom2Remitent $_SESSION["cognom2"];
        
$telefonRemitent $_SESSION["telefon"];
        
$mobilRemitent $_SESSION["mobil"];
        
$missatgeRemitent wordwrap($_SESSION["assumpte"], 70);
        
$missatge "Les dades del client són: ";
        
$missatge .= "Nóm: ".$nomRemitent."<br />";
        
$missatge .= "Primer cognom: ".$cognom1Remitent."<br />";
        
$missatge .= "Segon cognom: ".$cognom2Remitent."<br />";
        
$missatge .= "Telèfon: ".$telefonRemitent."<br />";
        
$missatge .= "Mòbil: ".$mobilRemitent."<br />";
        
$missatge .= "Email: ".$emailRemitent."<br />";
        
$missatge .= "La consulta es: <br />";
        
$missatge .= $missatgeRemitent."<br />";
        
$enviaEmail mail($destinatari$titol$missatge$capsaleres);
        return 
$enviaEmail;
    }

// Y este es el que le envia una respuesta comercial al usuario

public function EnviaEmailResposta()
    {
        
$destinatari $_SESSION["email"];
        if(
$this->idioma == "cat")
        {
            
$titol "Resposta comercial de smib";
            
$capsaleres "MIME-Version: 1.0\r\n";
            
$capsaleres .= "Content-type: text/html; charset=iso-8859-1\r\n";
            
$capsaleres .= "From: Departament comercial <[email protected]>\r\n";
            
$missatge $this->RespostaHTML();
        }
        else
        {
            
$titol "Respuesta comercial de smib";
            
$capsaleres "MIME-Version: 1.0\r\n";
            
$capsaleres .= "Content-type: text/html; charset=iso-8859-1\r\n";
            
$capsaleres .= "From: Departamento comercial <[email protected]>\r\n";
            
$missatge $this->RespostaHTML();
        }    
        
$enviaEmail mail($destinatari$titol$missatge$capsaleres);
        return 
$enviaEmail;
    } 
En ambos métodos he probado dos modos de envio:

Modo de envio 1:
Código PHP:
$enviaEmail mail($destinatari$titol$missatge$capsaleres);
        return 
$enviaEmail
Modo de envio 2:
Código PHP:
return mail($destinatari$titol$missatge$capsaleres); 
Y los dos modos me envian correctamente el email pero lo hacen en cuatro ocasiones como os comentaba al inici de mi mensaje.

Gracias de antemano a todos aquellos que dediqueis algo de tiempo a este post y podáis aportar algo de luz sobre este problema.