Se stai utilizzando SMTP nella configurazione e-mail del tuo negozio, potresti riscontrare il seguente problema – non ricevi notifiche via e-mail per i nuovi messaggi dal modulo di contatto. Mentre tutte le altre e-mail vengono inviate correttamente.
Questo accade perché PrestaShop invia le e-mail a nome del cliente, ma utilizzando il tuo server SMTP e il tuo account e-mail.
Potresti contattare il supporto del tuo hosting o il supporto del tuo provider e-mail, magari ti offriranno una soluzione. Altrimenti, puoi risolvere questo problema a livello di PrestaShop.
Soluzione:
1. Il modo più semplice è inviare le e-mail tramite la funzione PHP mail(). Puoi modificare le impostazioni e-mail nel back office (Parametri Avanzati -> E-mail).

Le e-mail inviate in questo modo finiscono molto spesso nello spam. E questo ovviamente è molto negativo.
2. L’altro modo – una piccola modifica al codice.
Tutti i file possono essere modificati tramite FTP. I percorsi dei file sono relativi alla root del sito.
Tutte le modifiche dovrebbero essere implementate nella classe override: /override/controllers/ContactController.php
Nel file /controllers/ContactController.php puoi trovare la funzione postProcess(). E alla fine di questa funzione trova il seguente codice:
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.'); } |
Questo codice serve per inviare le e-mail a un cliente e a un amministratore. Questo esempio è preso da PrestaShop 1.6, nelle altre versioni potrebbe essere leggermente diverso.
Devi sostituire quel codice con il seguente:
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 | // salva il metodo di invio email corrente nella variabile $ps_mail_method = Configuration::get('PS_MAIL_METHOD'); // cambia il metodo di invio email a PHP mail() Configuration::updateValue('PS_MAIL_METHOD', '1'); // invia email all'amministratore 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.'); } // ripristina il metodo predefinito Configuration::updateValue('PS_MAIL_METHOD', $ps_mail_method); // invia email a un cliente 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.'); } |
L’idea principale di queste modifiche: cambiamo il metodo di invio e-mail in PHP Mail() prima di inviare l’e-mail all’amministratore. E poi lo riportiamo al metodo predefinito (SMTP). Così, l’e-mail verrà inviata al cliente tramite il server SMTP e non finirà nello spam, e l’amministratore sarà abbastanza soddisfatto con PHP Mail().
