richo Posted November 16, 2011 Share Posted November 16, 2011 Bonjour, Dans le formulaire de contact, l'adresse du client est mis en tant qu'expéditeur du message; et je souhaiterais la modifier comme ci dessous : - From : Adresse du contact ; - To : Adresse du contact ; - Reply-To : Adresse du client. D'apres ce que j'ai put lire il faut modifier soit contact-form.php ou ContactController.php, mais je ne sais pas du tout quoi changer :-/ Merci pour votre aide. Link to comment Share on other sites More sharing options...
Kinaïa Posted November 16, 2011 Share Posted November 16, 2011 La fonction d'envoi de mail est la fonction Send de la classe Mail. Tu retrouves l'appel à cette fonction (Mail::Send) dans le fichier ContactController.php du dossier controllers. Tu as ensuite les arguments suivants : Mail::Send( // Langue (int)(self::$cookie->id_lang), // Template 'contact', // Sujet Mail::l('Message from contact form'), // Variables pour le template HTML array('{email}' => $from, '{message}' => stripslashes($message)), // Email du destinataire $contact->email, // Nom du destinataire $contact->name, // Email de l'expediteur $from, // Nom de l'expediteur ((int)(self::$cookie->id_customer) ? $customer->firstname.' '.$customer->lastname : ''), // Piece jointe $fileAttachment) Tu peux alors changer les paramètres comme tu veux. Link to comment Share on other sites More sharing options...
richo Posted November 18, 2011 Author Share Posted November 18, 2011 Merci pour ta réponse, je vois effectivement où se trouvent les variables if (Mail::Send((int)(self::$cookie->id_lang), 'contact', Mail::l('Message from contact form'), array('{email}' => $from, '{message}' => stripslashes($message)), $contact->email, $contact->name, $from, ((int)(self::$cookie->id_customer) ? $customer->firstname.' '.$customer->lastname : ''), $fileAttachment) AND Mail::Send((int)(self::$cookie->id_lang), 'contact_form', Mail::l('Your message has been correctly sent'), array('{message}' => stripslashes($message)), $from)) self::$smarty->assign('confirmation', 1); mais j'ai du mal a savoir ce que je dois changer sans rien casser ... Peux tu me dire quel variable dois je mettre a la place de quel autre variable pour que l'adresse d'envoie soit celui du contact de la boutique et non celui du client ... Merci infiniment. Link to comment Share on other sites More sharing options...
Pressed0024 Posted September 22, 2012 Share Posted September 22, 2012 Same problem with Mailjet and prestashop. Which part of the code should I change to fix this problem? Link to comment Share on other sites More sharing options...
Pressed0024 Posted February 14, 2013 Share Posted February 14, 2013 Any updates? Link to comment Share on other sites More sharing options...
Christophe Boix Posted February 14, 2013 Share Posted February 14, 2013 if (Mail::Send((int)(self::$cookie->id_lang), 'contact', Mail::l('Message from contact form'), array('{email}' => $from, '{message}' => stripslashes($message)), $contact->email, $contact->name, $from, ((int)(self::$cookie->id_customer) ? $customer->firstname.' '.$customer->lastname : ''), $fileAttachment) AND Mail::Send((int)(self::$cookie->id_lang), 'contact_form', Mail::l('Your message has been correctly sent'), array('{message}' => stripslashes($message)), $from)) self::$smarty->assign('confirmation', 1); Avec ce code, 2 mails sont envoyés grâce à la fonction Mail::Send Le premier Send est envoyé à l'Administrateur Le second Send est envoyé au Client. Je ne suis pas sûr, mais peut etre que ceci pourrait fonctionner : if (Mail::Send((int)(self::$cookie->id_lang), 'contact', Mail::l('Message from contact form'), array('{email}' => $from, '{message}' => stripslashes($message)), $contact->email, $contact->name, $from, ((int)(self::$cookie->id_customer) ? $customer->firstname.' '.$customer->lastname : ''), $fileAttachment) AND Mail::Send((int)(self::$cookie->id_lang), 'contact_form', Mail::l('Your message has been correctly sent'), array('{message}' => stripslashes($message)), $from,((int)(self::$cookie->id_customer) ? $customer->firstname.' '.$customer->lastname : ''),$contact->email)) self::$smarty->assign('confirmation', 1); Link to comment Share on other sites More sharing options...
Pressed0024 Posted February 14, 2013 Share Posted February 14, 2013 What if I just need to set the Sender: as my website email? (meaning send just 1 email with my website email as the Sender:) I'm using Mailjet and each time someone use the Contact Us page to email us, Mailjet will trigger a new sender alert since the Sender: is the customer's email address. I need to fix the Sender: address. Link to comment Share on other sites More sharing options...
Christophe Boix Posted February 14, 2013 Share Posted February 14, 2013 try this : $yourEmail="[email protected]"; if (Mail::Send((int)(self::$cookie->id_lang), 'contact', Mail::l('Message from contact form'), array('{email}' => $from, '{message}' => stripslashes($message)), $contact->email, $contact->name, $yourEmail, ((int)(self::$cookie->id_customer) ? $customer->firstname.' '.$customer->lastname : ''), $fileAttachment) AND Mail::Send((int)(self::$cookie->id_lang), 'contact_form', Mail::l('Your message has been correctly sent'), array('{message}' => stripslashes($message)), $from,((int)(self::$cookie->id_customer) ? $customer->firstname.' '.$customer->lastname : ''),$yourEmail)) self::$smarty->assign('confirmation', 1); Link to comment Share on other sites More sharing options...
eve20100 Posted September 29, 2013 Share Posted September 29, 2013 (edited) Bonjour, La solution proposée par Christophe Boix fonctionne-t-elle ? Car je souhaite moi aussi me lancer avec mailjet... Merci d'avance ! Edit : sinon tout bêtement, ne peut-on pas inverser les 2 variables : $contact->email, $contact->name, $from, à remplacer par : $from, $contact->name, $contact->email, ? Edited September 29, 2013 by eve20100 (see edit history) Link to comment Share on other sites More sharing options...
eve20100 Posted September 29, 2013 Share Posted September 29, 2013 Bon eh bien non, je viens de tester les 2 solutions, et ça ne change absolument pas l'expéditeur du formulaire de contact. C'est donc ailleurs que ça se passe... Link to comment Share on other sites More sharing options...
eve20100 Posted September 29, 2013 Share Posted September 29, 2013 @Pressed0024 : Hi, I've got the same problem. Have you solved this issue ? I've setted up Mailjet on my webshop, but I had to disable it when I've noticed that customers writing on the contact form were considered as senders for mailjet. Which part of the code do we have to change ? Prestateam, we need your help !! Thanks Link to comment Share on other sites More sharing options...
eve20100 Posted September 29, 2013 Share Posted September 29, 2013 Si ça peut aider quelqu'un, j'ai enfin résolu ce problème d'adresse expéditeur pour Mailjet : Modifiez les données suivantes : Dans Controllers / ContactControllers.php ligne 161, remplacez $from par votre email : if (Mail::Send((int)(self::$cookie->id_lang), 'contact', Mail::l('Message from contact form'), array('{email}' => $from, '{message}' => stripslashes($message)), $contact->email, $contact->name, '[email protected]', ((int)(self::$cookie->id_customer) ? $customer->firstname.' '.$customer->lastname : ''), $fileAttachment) Dans Controllers / OrderDetailControllers.php ligne 86, remplacez customer->email par votre email : $to, $toName, '[email protected]', $customer->firstname.' '.$customer->lastname); et ça marche !! 1 Link to comment Share on other sites More sharing options...
SebastienSerre Posted September 30, 2013 Share Posted September 30, 2013 (edited) Bonjour Eve2010, Dans le dossier Contollers je n'ai que 2 dossiers (Admin et front) ainsi que l'index.php. Je suis sous 1.5.5. Dans Front, j'ai bien ContactControllers.php mais il ne ressemble pas a ce que tus as... Peux tu m'aider stp? Merci -- Alors apres avoir bidouillé les fichiers trouvé dans controllers/front j'ai une jolie page blanche lorsque je clique sur contact.... http://www.les2sous.com/fr/contactez-nous Edited September 30, 2013 by sebastienserre (see edit history) Link to comment Share on other sites More sharing options...
eve20100 Posted September 30, 2013 Share Posted September 30, 2013 Bonjour Sébastien, Je n'ai pas les fichiers de la 1.5 (je suis encore en 1.4), mais si tu as un éditeur du style dreamweaver, ou même un éditeur de texte, fais une recherche dans ton fichier ContactContollers.php, et recherche l'expression Mail::Send ça t'affichera les différents endroits où est cette variable. Seulement quelques occurences normalement. Et ensuite, à l'oeil, cherche ce qui ressemble à ça à côte de Mail::Send : if (Mail::Send((int)(self::$cookie->id_lang), 'contact', Mail::l('Message from contact form'), array('{email}' => $from, '{message}' => stripslashes($message)), $contact->email, $contact->name, '[email protected]', ((int)(self::$cookie->id_customer) ? $customer->firstname.' '.$customer->lastname : ''), $fileAttachment) A la place de '[email protected]' il y aura $from Voilà j'espère t'avoir aidé. Pour Orderdetailcontroller, il faut chercher dans les controllers. Peut-être que ça a changé de nom dans la 1.5 idem tu peux faire une recherche informatique, autant que ce soit le pc qui réfléchisse... Link to comment Share on other sites More sharing options...
-Johan- Posted February 26, 2014 Share Posted February 26, 2014 Pour utiliser l'e-mail de la boutique et ajouter le reply to de l'internaute : Ouvrir classes/Mail.php Chercher : $send = $swift->send( Au-dessus ajouter : $message->setReplyTo($from); $from = Configuration::get('PS_SHOP_EMAIL'); 1 Link to comment Share on other sites More sharing options...
Wheiden Posted March 31, 2014 Share Posted March 31, 2014 Bonjour, avez-vous essayé ceci avec le module mailjet ? Le bout de code à modifier me parrait tout à fait logique or il ne semble pas être pris en compte, comme ci on ne passait pas du tout dans cette fonction. Un problème de cache de prestashop ou de mon VPS ? Ou alors le module override l'envoie d'email mais j'ai beau avoir décortiqué tout le code je n'y comprends rien. Link to comment Share on other sites More sharing options...
Gym course Posted November 9, 2014 Share Posted November 9, 2014 Bonjour j'ai installé mailjet et testé la modification des ligne 161 et 86 sous version presta 1.4.7.0 , mais sur le site , ceci ouvre une page blanche lorsque mes clients cliques sur "contactez nous" pouvez vous m'aider ? salutations cj Link to comment Share on other sites More sharing options...
BCVITA Posted December 3, 2014 Share Posted December 3, 2014 Bonjour Joffrey08 Vérifies bien que tu as mis ton adresse mail de cette façon '[email protected]' (ne pas oublier le symbole " ' " avant et après le mail) Link to comment Share on other sites More sharing options...
Trafiquant Posted February 11, 2016 Share Posted February 11, 2016 (edited) Bonjour Sébastien, Je n'ai pas les fichiers de la 1.5 (je suis encore en 1.4), mais si tu as un éditeur du style dreamweaver, ou même un éditeur de texte, fais une recherche dans ton fichier ContactContollers.php, et recherche l'expression Mail::Send ça t'affichera les différents endroits où est cette variable. Seulement quelques occurences normalement. Et ensuite, à l'oeil, cherche ce qui ressemble à ça à côte de Mail::Send : if (Mail::Send((int)(self::$cookie->id_lang), 'contact', Mail::l('Message from contact form'), array('{email}' => $from, '{message}' => stripslashes($message)), $contact->email, $contact->name, '[email protected]', ((int)(self::$cookie->id_customer) ? $customer->firstname.' '.$customer->lastname : ''), $fileAttachment) A la place de '[email protected]' il y aura $from Voilà j'espère t'avoir aidé. Pour Orderdetailcontroller, il faut chercher dans les controllers. Peut-être que ça a changé de nom dans la 1.5 idem tu peux faire une recherche informatique, autant que ce soit le pc qui réfléchisse... Bonjour à tous, Un grand merci à @eve20100 dont j'ai pu retrouver toutes les interventions sur ce même sujet, en Français et en Anglais (SVP ! ) et qui m'a aidé à trouver la solution pour contrer la politique MailJet, qui se refuse d'implémenter un système de filtrage des mails envoyés par la boutique. Dans la mesure où sa réponse m'a aidé, 3 ans plus tard, à mettre en place les modifications pour un Prestashop 1.5.6.0, je vous propose de trouver ci-après les overrides que j'ai pu créer dans le dossier /override/controllers/front : ContactController.php (voir lignes 167, 171, 173) : <?php class ContactController extends ContactControllerCore { /** * Start forms process * @see FrontController::postProcess() */ public function postProcess() { if (Tools::isSubmit('submitMessage')) { $extension = array('.txt', '.rtf', '.doc', '.docx', '.pdf', '.zip', '.png', '.jpeg', '.gif', '.jpg'); $fileAttachment = Tools::fileAttachment('fileUpload'); $message = Tools::getValue('message'); // Html entities is not usefull, iscleanHtml check there is no bad html tags. if (!($from = trim(Tools::getValue('from'))) || !Validate::isEmail($from)) $this->errors[] = Tools::displayError('Invalid email address.'); else if (!$message) $this->errors[] = Tools::displayError('The message cannot be blank.'); else if (!Validate::isCleanHtml($message)) $this->errors[] = Tools::displayError('Invalid message'); else if (!($id_contact = (int)(Tools::getValue('id_contact'))) || !(Validate::isLoadedObject($contact = new Contact($id_contact, $this->context->language->id)))) $this->errors[] = Tools::displayError('Please select a subject from the list provided. '); else if (!empty($fileAttachment['name']) && $fileAttachment['error'] != 0) $this->errors[] = Tools::displayError('An error occurred during the file-upload process.'); else if (!empty($fileAttachment['name']) && !in_array( Tools::strtolower(substr($fileAttachment['name'], -4)), $extension) && !in_array( Tools::strtolower(substr($fileAttachment['name'], -5)), $extension)) $this->errors[] = Tools::displayError('Bad file extension'); else { $customer = $this->context->customer; if (!$customer->id) $customer->getByEmail($from); $contact = new Contact($id_contact, $this->context->language->id); if (!(( ($id_customer_thread = (int)Tools::getValue('id_customer_thread')) && (int)Db::getInstance()->getValue(' SELECT cm.id_customer_thread FROM '._DB_PREFIX_.'customer_thread cm WHERE cm.id_customer_thread = '.(int)$id_customer_thread.' AND cm.id_shop = '.(int)$this->context->shop->id.' AND token = \''.pSQL(Tools::getValue('token')).'\'') ) || ( $id_customer_thread = CustomerThread::getIdCustomerThreadByEmailAndIdOrder($from, (int)Tools::getValue('id_order')) ))) { $fields = Db::getInstance()->executeS(' SELECT cm.id_customer_thread, cm.id_contact, cm.id_customer, cm.id_order, cm.id_product, cm.email FROM '._DB_PREFIX_.'customer_thread cm WHERE email = \''.pSQL($from).'\' AND cm.id_shop = '.(int)$this->context->shop->id.' AND ('. ($customer->id ? 'id_customer = '.(int)($customer->id).' OR ' : '').' id_order = '.(int)(Tools::getValue('id_order')).')'); $score = 0; foreach ($fields as $key => $row) { $tmp = 0; if ((int)$row['id_customer'] && $row['id_customer'] != $customer->id && $row['email'] != $from) continue; if ($row['id_order'] != 0 && Tools::getValue('id_order') != $row['id_order']) continue; if ($row['email'] == $from) $tmp += 4; if ($row['id_contact'] == $id_contact) $tmp++; if (Tools::getValue('id_product') != 0 && $row['id_product'] == Tools::getValue('id_product')) $tmp += 2; if ($tmp >= 5 && $tmp >= $score) { $score = $tmp; $id_customer_thread = $row['id_customer_thread']; } } } $old_message = Db::getInstance()->getValue(' SELECT cm.message FROM '._DB_PREFIX_.'customer_message cm LEFT JOIN '._DB_PREFIX_.'customer_thread cc on (cm.id_customer_thread = cc.id_customer_thread) WHERE cc.id_customer_thread = '.(int)($id_customer_thread).' AND cc.id_shop = '.(int)$this->context->shop->id.' ORDER BY cm.date_add DESC'); if ($old_message == $message) { $this->context->smarty->assign('alreadySent', 1); $contact->email = ''; $contact->customer_service = 0; } if ($contact->customer_service) { if ((int)$id_customer_thread) { $ct = new CustomerThread($id_customer_thread); $ct->status = 'open'; $ct->id_lang = (int)$this->context->language->id; $ct->id_contact = (int)($id_contact); if ($id_order = (int)Tools::getValue('id_order')) $ct->id_order = $id_order; if ($id_product = (int)Tools::getValue('id_product')) $ct->id_product = $id_product; $ct->update(); } else { $ct = new CustomerThread(); if (isset($customer->id)) $ct->id_customer = (int)($customer->id); $ct->id_shop = (int)$this->context->shop->id; if ($id_order = (int)Tools::getValue('id_order')) $ct->id_order = $id_order; if ($id_product = (int)Tools::getValue('id_product')) $ct->id_product = $id_product; $ct->id_contact = (int)($id_contact); $ct->id_lang = (int)$this->context->language->id; $ct->email = $from; $ct->status = 'open'; $ct->token = Tools::passwdGen(12); $ct->add(); } if ($ct->id) { $cm = new CustomerMessage(); $cm->id_customer_thread = $ct->id; $cm->message = $message; if (isset($fileAttachment['rename']) && !empty($fileAttachment['rename']) && rename($fileAttachment['tmp_name'], _PS_MODULE_DIR_.'../upload/'.basename($fileAttachment['rename']))) $cm->file_name = $fileAttachment['rename']; $cm->ip_address = ip2long($_SERVER['REMOTE_ADDR']); $cm->user_agent = $_SERVER['HTTP_USER_AGENT']; if (!$cm->add()) $this->errors[] = Tools::displayError('An error occurred while sending the message.'); } else $this->errors[] = Tools::displayError('An error occurred while sending the message.'); } if (!count($this->errors)) { $var_list = array( '{order_name}' => '-', '{attached_file}' => '-', '{message}' => Tools::nl2br(stripslashes($message)), '{email}' => $from, '{product_name}' => '', ); if (isset($fileAttachment['name'])) $var_list['{attached_file}'] = $fileAttachment['name']; $id_order = (int)Tools::getValue('id_order'); $id_product = (int)Tools::getValue('id_product'); if (isset($ct) && Validate::isLoadedObject($ct) && $ct->id_order) $id_order = $ct->id_order; if ($id_order) { $order = new Order((int)$id_order); $var_list['{order_name}'] = $order->getUniqReference(); $var_list['{id_order}'] = $id_order; } if ($id_product) { $product = new Product((int)$id_product); if (Validate::isLoadedObject($product) && isset($product->name[Context::getContext()->language->id])) $var_list['{product_name}'] = $product->name[Context::getContext()->language->id]; } if (empty($contact->email)) 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, '[email protected]', null, null, null, $fileAttachment); else { if (!Mail::Send($this->context->language->id, 'contact', Mail::l('Message from contact form').' [no_sync]', $var_list, $contact->email, $contact->name, '[email protected]', ($customer->id ? $customer->firstname.' '.$customer->lastname : ''), $fileAttachment) || !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, '[email protected]', null, $contact->email, $contact->name, $fileAttachment)) $this->errors[] = Tools::displayError('An error occurred while sending the message.'); } } if (count($this->errors) > 1) array_unique($this->errors); else $this->context->smarty->assign('confirmation', 1); } } } } OrderDetailController.php (voir ligne 68) : <?php class OrderDetailController extends OrderDetailControllerCore { /** * Start forms process * @see FrontController::postProcess() */ public function postProcess() { if (Tools::isSubmit('submitMessage')) { $idOrder = (int)(Tools::getValue('id_order')); $msgText = Tools::getValue('msgText'); if (!$idOrder || !Validate::isUnsignedId($idOrder)) $this->errors[] = Tools::displayError('The order is no longer valid.'); elseif (empty($msgText)) $this->errors[] = Tools::displayError('The message cannot be blank.'); elseif (!Validate::isMessage($msgText)) $this->errors[] = Tools::displayError('This message is invalid (HTML is not allowed).'); if (!count($this->errors)) { $order = new Order($idOrder); if (Validate::isLoadedObject($order) && $order->id_customer == $this->context->customer->id) { //check if a thread already exist $id_customer_thread = CustomerThread::getIdCustomerThreadByEmailAndIdOrder($this->context->customer->email, $order->id); $cm = new CustomerMessage(); if (!$id_customer_thread) { $ct = new CustomerThread(); $ct->id_contact = 0; $ct->id_customer = (int)$order->id_customer; $ct->id_shop = (int)$this->context->shop->id; if (($id_product = (int)Tools::getValue('id_product')) && $order->orderContainProduct((int)$id_product)) $ct->id_product = $id_product; $ct->id_order = (int)$order->id; $ct->id_lang = (int)$this->context->language->id; $ct->email = $this->context->customer->email; $ct->status = 'open'; $ct->token = Tools::passwdGen(12); $ct->add(); } else $ct = new CustomerThread((int)$id_customer_thread); $cm->id_customer_thread = $ct->id; $cm->message = $msgText; $cm->ip_address = ip2long($_SERVER['REMOTE_ADDR']); $cm->add(); if (!Configuration::get('PS_MAIL_EMAIL_MESSAGE')) $to = strval(Configuration::get('PS_SHOP_EMAIL')); else { $to = new Contact((int)(Configuration::get('PS_MAIL_EMAIL_MESSAGE'))); $to = strval($to->email); } $toName = strval(Configuration::get('PS_SHOP_NAME')); $customer = $this->context->customer; if (Validate::isLoadedObject($customer)) Mail::Send($this->context->language->id, 'order_customer_comment', Mail::l('Message from a customer'), array( '{lastname}' => $customer->lastname, '{firstname}' => $customer->firstname, '{email}' => '[email protected]', '{id_order}' => (int)($order->id), '{order_name}' => $order->getUniqReference(), '{message}' => Tools::nl2br($msgText) ), $to, $toName, $customer->email, $customer->firstname.' '.$customer->lastname); if (Tools::getValue('ajax') != 'true') Tools::redirect('index.php?controller=order-detail&id_order='.(int)$idOrder); $this->context->smarty->assign('message_confirmation', true); } else $this->errors[] = Tools::displayError('Order not found'); } } } } En espérant que cela puisse servir à quelqu'un. ++ Edited February 11, 2016 by Trafiquant (see edit history) Link to comment Share on other sites More sharing options...
jdepluvie Posted March 6, 2018 Share Posted March 6, 2018 Bonjour, Pour ma part je cherche à supprimer temporairement le mail qui est envoyé au client en copie lui signifiant que son mai la bien été envoyé. Je suis donc parti de ContactController.php J'ai limité le code à ceci le temps de l’implémentation d'une solution valable dans le temps. if (Mail::Send((int)self::$cookie->id_lang, 'contact', Mail::l('Message from contact form', (int)self::$cookie->id_lang), $email_variables, $contact->email, $contact->name, $from, ((int)(self::$cookie->id_customer) ? $customer->firstname.' '.$customer->lastname : ''), $fileAttachment) ) Cela a pour effet de ne pas me pénaliser du côté "envoi de mail" (mailjet et autres services ou réputation pour les mails sortant du serveur dédié) Par ailleurs dans le htaccess j'ai ajouté quelques règles et depuis j'ai évité près de 2/3 des tentatives d'après les logs (pour le moment): Order Allow,Deny Allow from all Deny from 5.62 Deny from 5.101 Deny from 5.188 Deny from 5.189 Deny from 46.161 Deny from 46.243 Deny from 79.110 Deny from 93.179 Deny from 95.31 Deny from 141.101 Deny from 185.14 Deny from 188.72 Deny from 188.165 Deny from 193.93 Si ca peut servir. @+ Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now