prestashop

No funciona el correo en Prestashop 1.5

Si tenemos problemas con el envio de mails en codestashop tenemos que comprobar:

  • El mail esta correctamente en:
    • codeferencias->Contacto
    • Empleados->Contacto
    • Modulos->Alertas por correo
  • Comprobar que existen las carpetas con los ficheros de los mails de los idiomas utilizados en el codestaShop dentro de la carpeta /mails.
  • Tenemos configuradas correctamente las imágenes de los logos en la configuración de la plantilla.

Puede que algunos servidores tenga deshabilitada la función mail de PHP, si es asi codestashop nos permite configurar el envio de correos mediante SMTP en Parámetros Avanzados->E-mail.

Si se usa la funcion mail() de php y no llegan los correos de prueba puede ser porque no este habilitada la funcion en el servidor que podemos comprobar subiendo un fichero en el raiz de nuestro directorio como este:

< ? php

// El mensaje

$mensaje = "Línea 1\nLínea 2\nLínea 3";

// En caso de que cualquiera de las líneas sea más larga de 70 caracteres,

// debe usarse wordwrap()

$mensaje = wordwrap($mensaje, 70);

// Send

mail('correo@dominio.com', 'Mi título', $mensaje);

?>Sustituyendo correo y dominio por nuestros datos. Si este correo nos llega hemos de hacer unas pequeñas modificaciones en nuestros ficheros de codestashop:

El fichero tools\swift\Swift\Plugin\MailSend.php hace una comprobación de modo seguro que no funciona por lo que lo mejor es quitarla:
 
public function doMail($to, $subject, $message, $headers, $params='')
{
$original_from = @ini_get("sendmail_from");
@ini_set("sendmail_from", $this->returnPath);
 
$headers = $headers->build();
 
//if (!ini_get("safe_mode")) $success = mail($to, $subject, $message, $headers, $params);
// else
$success = mail($to, $subject, $message,$headers);
if (!$success)
{
@ini_set("sendmail_from", $original_from);
throw new Swift_ConnectionException("Sending failed using mail() as PHP's default mail() function returned boolean FALSE.");
}
@ini_set("sendmail_from", $original_from);
}
 

Si con esto sigue sin funcionar nos vamos al fichero tools\swift\Swift\Message.php y en la linea setFrom ponemos nuestro dominio:
 

$this->setFrom("Dominio");

 
Si con esto sigue sin funcionar en el fichero tools\swift\Swift\Swift.php buscamos la linea:

if (!($has_reply_to = $message->getReplyTo())) $message->setReplyTo($from);

Y justo detrás añadimos la linea :

if (!$has_reply_to[0])$message->setReplyTo($from->getAddress());

 
Con todo esto debería funcionar.