Buenas,
no es eso, es que la función mail se encalla mucho rato, dado que utiliza el comando sendmail. De todas formas, creo que lo he solucionado, haciendo una chapucilla. He utilizado un thread para llamar a la función mail, así lo realiza un proceso hijo, y mientras lo va enviando, el cliente (página web) ya tiene la respuesta, aunque sea afirmativa y la función mail devuelva finalmente false. Es una chapuza pero de momento me ha funcionado.
Este es el trozo de código que he utilizado (aunque este no es el foro adecuado para ello):
Código PHP:
if(function_exists('pcntl_fork'))
{
$pid = pcntl_fork();
}
if (isset($pid) && $pid == -1) die("could not fork");
elseif (isset($pid) && $pid) exit();
else
{
if(!mail($to,$subject,$message,$headers)) return false;
else
{
if($generate_logs) cmMain::Log("MAIL: Mail (HTML) sended to {$to}");
return true;
}
}
Ventajas del sistema: El script tarda 0.0010 ms en ejecutarse.
Desventajas: No se sabe si dará error o lo que sea, pero no pasa nada porque el envío de mails para nada es imperativo e imprescindible para el funcionamiento de la web.
Hay que instalar la extensión pcntl que no me venía por defecto en freebsd.