Risolvere il problema del modulo di contatto di PrestaShop che non invia e-mail.

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).
1
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().

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *