Jump to content

changement du from du formulaire de contact


richo

Recommended Posts

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

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

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

  • 10 months later...
  • 4 months later...

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

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

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

  • 7 months later...

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 by eve20100 (see edit history)
Link to comment
Share on other sites

@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

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 !!   :D

  • Like 1
Link to comment
Share on other sites

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 by sebastienserre (see edit history)
Link to comment
Share on other sites

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

  • 4 months later...

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');
  • Like 1
Link to comment
Share on other sites

  • 1 month later...

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

  • 7 months later...
  • 4 weeks later...
  • 1 year later...

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 by Trafiquant (see edit history)
Link to comment
Share on other sites

  • 2 years later...

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...