Si vous utilisez SMTP dans la configuration de messagerie de votre boutique, vous pourriez rencontrer le problème suivant : vous ne recevez pas de notifications par e-mail concernant les nouveaux messages du formulaire de contact. Et tous les autres e-mails sont envoyés correctement.
Cela se produit parce que PrestaShop envoie des e-mails au nom du client, mais en utilisant votre serveur SMTP et votre compte de messagerie.
Vous pourriez contacter le support de votre hébergement ou celui de votre fournisseur de messagerie, peut-être qu’ils vous proposeront une solution. Sinon, vous pouvez résoudre ce problème au niveau de PrestaShop.
Solution :
1. Le moyen le plus simple est d’envoyer des e-mails via la fonction PHP mail(). Vous pouvez modifier les paramètres de messagerie dans le back-office (Paramètres avancés -> E-mail).

Les e-mails envoyés de cette manière tombent très souvent dans les spams. Et c’est très mauvais bien sûr.
2. L’autre moyen – une petite modification de code.
Tous les fichiers peuvent être modifiés via FTP. Les chemins des fichiers sont relatifs à la racine du site.
Toutes les modifications doivent être implémentées dans la classe de surcharge : /override/controllers/ContactController.php
Dans le fichier /controllers/ContactController.php, vous pouvez trouver la fonction postProcess(). Et à la fin de cette fonction, trouvez le code suivant :
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.'); } |
Ce code sert à envoyer des e-mails à un client et à un administrateur. Cet exemple est donné pour PrestaShop 1.6, dans les autres versions, cela peut être légèrement différent.
Vous devez remplacer ce code par le suivant :
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.'); } |
L’idée principale de ces modifications : nous changeons la méthode d’envoi d’e-mails en PHP Mail() avant d’envoyer l’e-mail à l’administrateur. Ensuite, nous la remettons à la méthode par défaut (SMTP). Ainsi, l’e-mail sera envoyé au client via le serveur SMTP et ne tombera pas dans les spams, et l’administrateur sera assez satisfait avec PHP Mail().
