Header Ads Widget

Ticker

6/recent/ticker-posts

Arregle el formulario de contacto de PrestaShop que no envía correos.

Si está utilizando SMTP en la configuración de correo electrónico de su tienda, entonces podría encontrar el siguiente problema: no está recibiendo notificaciones por correo electrónico sobre nuevos mensajes desde el formulario de contacto. Y todos los demás correos electrónicos se envían bien.

Ocurre porque PrestaShop está enviando correos desde el nombre del cliente, pero usando su servidor SMTP y su cuenta de correo electrónico.
Puede ponerse en contacto con su soporte de alojamiento o con el soporte de su proveedor de correo electrónico, tal vez ellos le ofrezcan alguna solución. De lo contrario, puede solucionar este problema a nivel de PrestaShop.

Solución:

1. La forma más sencilla es enviar correo a través de la función PHP mail () . Puede cambiar la configuración del correo electrónico en el Back Office (Parámetros avanzados -> Correo electrónico). Los correos que se envían de esta forma suelen caer en el spam. Y es muy malo por supuesto.
1
2. Al revés: una pequeña modificación del código .
Todos los archivos se pueden editar a través de FTP. Las rutas de archivo son relativas a la raíz del sitio.
Todos los cambios deben implementarse en la clase de anulación: /override/controllers/ContactController.php
En el archivo /controllers/ContactController.php puede encontrar la función postProcess () . Y al final de esta función encuentra el siguiente código:
1
2
3
4
5
6
if Mail :: Send $ this -> context -> language -> id 'contact' Mail :: 'Message from contact form' '[no_sync]' ,
    $ var_list $ contact -> email $ contact -> name null null ,
            $ file_attachment null ,    _PS_MAIL_DIR_ false null , nulo $ de ||
        Mail :: Send $ this -> context -> language -> id 'contact_form' isset ( $ ct && Validate :: isLoadedObject $ ct ) ? Sprintf ( Mail :: 'Tu mensaje tiene enviado correctamente # ct% 1 $ s # tc% 2 $ s ' $ ct -> id $ ct ->token Mail :: 'Su mensaje ha sido enviado correctamente' $ var_list $ from null null null $ file_attachment null , _PS_MAIL_DIR_ false null null $ contact -> email {
    $ esto -> errores = Herramientas :: displayError ('Se produjo un error al enviar el mensaje.' ;
}
Este código es para enviar correos electrónicos a un cliente y a un administrador. Este ejemplo proviene de PrestaShop 1.6, en las otras versiones puede ser ligeramente diferente.
Debe reemplazar ese código por lo siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// guarda el método de envío de correo electrónico actual en la variable
$ ps_mail_method = Configuration :: get 'PS_MAIL_METHOD' ;
// cambia el método de envío de correo electrónico a PHP mail ()
Configuration :: updateValue 'PS_MAIL_METHOD' '1' ;
// envía un correo electrónico al administrador
if Mail :: Send (
    $ this -> context -> language -> id ,
    'contact' ,
    Mail :: ('Mensaje del formulario de contacto' '[no_sync]' ,
    $ var_list ,
    $ contact -> email ,
    $ contact -> name ,
    $ from ,
    $ customer -> id ? $ customer -> firstname '' $ customer -> lastname '' ,
    $ file_attachment
{
    $ this -> errors = Tools :: displayError ('Se produjo un error al enviar el mensaje.' ;
}

// devolver el método predeterminado
Configuration :: updateValue 'PS_MAIL_METHOD' $ ps_mail_method ;
// enviar un correo electrónico a un cliente
si Mail :: Send (
    $ this -> context -> language -> id ,
    'contact_form' ,
    isset ( $ ct && Validate :: isLoadedObject $ ct )) ? sprintf ( Mail :: 'Su mensaje ha sido enviado correctamente # ct% 1 $ s # tc% 2 $ s' $ ct -> id $ ct -> token Mail :: 'Su mensaje se ha enviado correctamente ' ,
    $ var_list ,
    $ from ,
    null ,
    $ contact -> email ,
    $ contact -> name ,
    $ file_attachment
{
    $ this ->errors = Tools :: displayError 'Se produjo un error al enviar el mensaje.' ;
}
La idea principal de estos cambios: cambiamos el método de envío de correo electrónico a PHP Mail () antes de enviar el correo al administrador. Y luego lo cambiamos de nuevo al método predeterminado (SMTP). Por lo tanto, el correo se enviará al cliente a través del servidor SMTP y no caerá en el spam, y el administrador estará lo suficientemente feliz con PHP Mail ().

Publicar un comentario

0 Comentarios