Si está utilizando SMTP en la configuración de correo electrónico de su tienda, entonces podría encontrar el siguiente problema: no recibe notificaciones por correo electrónico sobre nuevos mensajes del formulario de contacto. Y todos los demás correos se envían correctamente.
Ocurre porque PrestaShop envía correos desde el nombre del cliente, pero utilizando su servidor SMTP y su cuenta de correo electrónico.
Podría contactar al soporte de su alojamiento o al soporte de su proveedor de correo electrónico, tal vez le ofrezcan alguna solución. Si no, puede solucionar este problema a nivel de PrestaShop.
Solución:
1. La forma más fácil es enviar correo a través de la función PHP mail(). Puede cambiar la configuración de correo electrónico en el back office (Parámetros Avanzados -> Correo electrónico).

Los correos enviados de esta manera muy a menudo caen en spam. Y eso es muy malo, por supuesto.
2. La otra forma: una pequeña modificación de código.
Todos los archivos se pueden editar a través de FTP. Las rutas de los archivos son relativas a la raíz del sitio.
Todos los cambios deben implementarse en la clase override: /override/controllers/ContactController.php
En el archivo /controllers/ContactController.php puede encontrar la función postProcess(). Y al final de esta función encuentre el siguiente código:
1 2 3 4 5 6 | if (!Mail::Send($this->context->language->id, 'contact', Mail::l('Message from contact form').' [no_sync]', $var_list, $contact->email, $contact->name, null, null, $file_attachment, null, _PS_MAIL_DIR_, false, null, null, $from) || !Mail::Send($this->context->language->id, 'contact_form', ((isset($ct) && Validate::isLoadedObject($ct)) ? sprintf(Mail::l('Your message has been correctly sent #ct%1$s #tc%2$s'), $ct->id, $ct->token) : Mail::l('Your message has been correctly sent')), $var_list, $from, null, null, null, $file_attachment, null, _PS_MAIL_DIR_, false, null, null, $contact->email)) { $this->errors[] = Tools::displayError('An error occurred while sending the message.'); } |
Este código es para enviar correos a un cliente y a un administrador. Este ejemplo se da para PrestaShop 1.6, en las otras versiones puede ser ligeramente diferente.
Necesita reemplazar ese código por el 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 | // save the current email sending method to the variable $ps_mail_method = Configuration::get('PS_MAIL_METHOD'); // change email sending method to PHP mail() Configuration::updateValue('PS_MAIL_METHOD', '1'); // send email to admin if (!Mail::Send( $this->context->language->id, 'contact', Mail::l('Message from contact form').' [no_sync]', $var_list, $contact->email, $contact->name, $from, ($customer->id ? $customer->firstname.' '.$customer->lastname : ''), $file_attachment )) { $this->errors[] = Tools::displayError('An error occurred while sending the message.'); } // turn back default method Configuration::updateValue('PS_MAIL_METHOD', $ps_mail_method); // send email to a customer if(!Mail::Send( $this->context->language->id, 'contact_form', ((isset($ct) && Validate::isLoadedObject($ct)) ? sprintf(Mail::l('Your message has been correctly sent #ct%1$s #tc%2$s'), $ct->id, $ct->token) : Mail::l('Your message has been correctly sent')), $var_list, $from, null, $contact->email, $contact->name, $file_attachment )) { $this->errors[] = Tools::displayError('An error occurred while sending the message.'); } |
La idea principal de estos cambios: cambiamos el método de envío de correo a PHP Mail() antes de enviar el correo al administrador. Y luego lo cambiamos de nuevo al método predeterminado (SMTP). Así, el correo se enviará al cliente a través del servidor SMTP y no caerá en spam, y el administrador estará lo suficientemente feliz con PHP Mail().
