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.