{"id":2210,"date":"2021-02-01T23:10:05","date_gmt":"2021-02-01T21:10:05","guid":{"rendered":"https:\/\/www.h-hennes.fr\/blog\/?p=2210"},"modified":"2021-04-24T15:06:06","modified_gmt":"2021-04-24T13:06:06","slug":"prestashop-gerer-les-emails-dans-vos-modules","status":"publish","type":"post","link":"https:\/\/www.h-hennes.fr\/blog\/2021\/02\/01\/prestashop-gerer-les-emails-dans-vos-modules\/","title":{"rendered":"Prestashop : g\u00e9rer les emails dans vos modules"},"content":{"rendered":"\n<p>Dans cet article nous allons creuser tout de qui concerne la gestion des emails dans les modules prestashop.<br><br>Dans un premier temps comment envoyer un email bien s\u00fbr, mais nous verrons ensuite qu&rsquo;il est tr\u00e8s facile d&rsquo;interagir avec les emails syst\u00e8mes via les hooks.<br><br><em>Ce tutoriel s&rsquo;applique \u00e0 la version 1.7 de Prestashop, certains hooks n&rsquo;existent pas dans la version 1.6&nbsp; dont le hook <strong>hookActionEmailSendBefore<\/strong> , il reste cependant assez facile de les impl\u00e9menter manuellement en surchargeant la classe Mail<\/em><\/p>\n<p>Pour illustrer et tester tout \u00e7a nous allons passer par la cr\u00e9ation d&rsquo;un module de POC <strong>hh_demoemails<\/strong><\/p>\n<p>L&rsquo;archive sera disponible en fin d&rsquo;article, mais je pr\u00e9cise bien que c&rsquo;est un module de d\u00e9mo et d&rsquo;apprentissage et pas du tout en module destin\u00e9 \u00e0 \u00eatre mis en production \ud83d\ude09<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fonctionnement g\u00e9n\u00e9ral<\/h3>\n\n\n\n<p>La gestion de l&rsquo;envoi dans Prestashop est relativement basique car elle est centralis\u00e9e dans une seule fonction qui est la fonction <strong>send<\/strong> de la classe <strong>Mail<\/strong> voici ses param\u00e8tres, la signature de la fonction est relativement explicite<\/p>\n\n\n\n<pre escaped=\"true\" lang=\"php\">\/**\n     * Send Email.\n     *\n     * @param int $idLang Language ID of the email (to translate the template)\n     * @param string $template Template: the name of template not be a var but a string !\n     * @param string $subject Subject of the email\n     * @param string $templateVars Template variables for the email\n     * @param string $to To email\n     * @param string $toName To name\n     * @param string $from From email\n     * @param string $fromName To email\n     * @param array $fileAttachment array with three parameters (content, mime and name).\n     *                              You can use an array of array to attach multiple files\n     * @param bool $mode_smtp SMTP mode (deprecated)\n     * @param string $templatePath Template path\n     * @param bool $die Die after error\n     * @param int $idShop Shop ID\n     * @param string $bcc Bcc recipient address. You can use an array of array to send to multiple recipients\n     * @param string $replyTo Reply-To recipient address\n     * @param string $replyToName Reply-To recipient name\n     *\n     * @return bool|int Whether sending was successful. If not at all, false, otherwise amount of recipients succeeded.\n     *\/\n    public static function send(\n        $idLang,\n        $template,\n        $subject,\n        $templateVars,\n        $to,\n        $toName = null,\n        $from = null,\n        $fromName = null,\n        $fileAttachment = null,\n        $mode_smtp = null,\n        $templatePath = _PS_MAIL_DIR_,\n        $die = false,\n        $idShop = null,\n        $bcc = null,\n        $replyTo = null,\n        $replyToName = null\n    ) {\n \/\/Code de la fonction\n} \n<\/pre>\n\n\n\n<p>Les templates des emails syst\u00e8mes par d\u00e9faut sont situ\u00e9s dans le dossier <strong>\/mails\/<\/strong> \u00e0 la racine de prestashop et rang\u00e9 ensuite par code langue ( fr\/ en )<br><br>Dans le cas ou voulez changer le contenu d&rsquo;un email pour juste changer un texte, il ne faut surtout pas modifier ces emails de la racine , mais il n&rsquo;est pas n\u00e9cessaire de passer par un module<br><br>Le plus simple est tout simplement de copier les fichiers .html et .txt du mod\u00e8le souhait\u00e9 dans le dossier mails du th\u00e8me.<br><br>Par exemple si vous souhaitez changer le contenu de l&#8217;email de <strong>paiement par ch\u00e8que<\/strong> en <strong>fran\u00e7ais<\/strong> et que votre th\u00e8me utilis\u00e9 est <strong>classic <\/strong><br>Il faut copier les fichiers :<\/p>\n<ul>\n<li>mails\/fr\/cheque.html vers \/themes\/classic\/mails\/fr\/cheque.html<\/li>\n<li>mails\/fr\/cheque.txt vers \/themes\/classic\/mails\/fr\/cheque.txt<\/li>\n<\/ul>\n<p>C&rsquo;est \u00e9galement possible si vous souhaitez changer des \u00e9l\u00e9ments sur l&#8217;email d&rsquo;un autre module&nbsp;<br>Par exemple pour modifier l&#8217;email de notification de nouvelle commande du module ps_emailalerts<br>Il faut copier les fichiers :<\/p>\n<ul>\n<li>modules\/ps_emailalerts\/mails\/fr\/new_order.html vers themes\/classic\/modules\/ps_mailalerts\/mails\/fr\/new_order.html<\/li>\n<li>modules\/ps_emailalerts\/mails\/fr\/new_order.txt vers themes\/classic\/modules\/ps_mailalerts\/mails\/fr\/new_order.txt<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Envoyer un email depuis un module<\/h3>\n\n\n\n<p>Cr\u00e9er un dossier <strong>mails<\/strong> ainsi qu&rsquo;un dossier avec les codes langues de votre site.<br>Pour l&rsquo;illustration on va uniquement cr\u00e9er un dossier <strong>fr<\/strong> , il suffira de proc\u00e9der de la m\u00eame mani\u00e8re pour les autres langues.<br><br>Pour chaque email il faut cr\u00e9er un fichier .html et un fichier.txt. Pour notre premier email nous allons lui donner le code <strong>demo<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/02\/image.png\"><img loading=\"lazy\" decoding=\"async\" width=\"250\" height=\"139\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/02\/image.png\" alt=\"\" class=\"wp-image-2211\"\/><\/a><\/figure>\n\n\n\n<p>Voici le code n\u00e9cessaire pour envoyer cet email de d\u00e9mo dans notre module<br>Vous trouverez \u00e9galement ces informations dans la documentation officielle : <a href=\"https:\/\/devdocs.prestashop.com\/1.7\/development\/mail\/\" target=\"_blank\" rel=\"noopener\">https:\/\/devdocs.prestashop.com\/1.7\/development\/mail\/<\/a><\/p>\n\n\n\n<pre escaped=\"true\" lang=\"php\">        \/\/Variable de l'email, par convention la cl\u00e9 est sous la forme {variable}\n        $emailsVars = [\n            '{variable1}' =&gt; 'Contenu variable 1',\n            '{variable2}' =&gt; 'Contenu variable 2'\n        ];\n\n        Mail::send(\n            $this-&gt;context-&gt;language-&gt;id, \/\/Identifiant de langue\n            'demo', \/\/Code du template ( nom du fichier sans extension) Attention il faut cr\u00e9er un fichier html et txt de chaque template\n            $this-&gt;l(' Module Installation',false,$this-&gt;context-&gt;language-&gt;locale), \/\/ Sujet de l'email ( on peut forcer la traduction dans une locale souhait\u00e9e)\n            $emailsVars,\/\/Variables de l'email\n            'email@test.com', \/\/ Email de l'adresse\n            NULL, \/\/receiver name\n            NULL, \/\/from email address\n            NULL,  \/\/from name\n            NULL, \/\/file attachment\n            NULL, \/\/mode smtp\n            _PS_MODULE_DIR_.'hh_demoemails\/mails' \/\/La ligne importante est ici ( chemin du dossier mail de votre module )\n        );\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Interagir avec les emails syst\u00e8me<\/h3>\n\n\n\n<p>La partie la plus int\u00e9ressante commence maintenant, car via un module il est possible \u00e9galement de changer tout et n&rsquo;importe quoi dans les emails syst\u00e8mes, et cela sans r\u00e9aliser aucune surcharge.<br><br>En utilisant tout simplement les hooks suivants :<\/p>\n<ul>\n<li>actionEmailSendBefore<\/li>\n<li>sendMailAlterTemplateVars<\/li>\n<li>actionEmailAddBeforeContent<\/li>\n<li>actionEmailAddAfterContent<\/li>\n<li>actionGetExtraMailTemplateVars<\/li>\n<li>actionMailAlterMessageBeforeSend<\/li>\n<\/ul>\n<p>Nous allons voir ensemble \u00e0 quoi ils peuvent servir et les illustrer avec un ou plusieurs cas d&rsquo;usages <br><br>Pour r\u00e9cup\u00e9rer les codes des templates emails, faut vous rendre dans le dossier mails\/fr\/ ( ou \/en\/ ) , le nom des templates correspond aux nom des fichiers sans extension.<br>Ex : account.html =&gt; account<\/p>\n<p><strong>sendMailAlterTemplateVars<\/strong><\/p>\n<p>Ce hook permets de modifier les valeurs donn\u00e9es initialement aux variables de l&#8217;email.<br><br>Un exemple d\u2019utilisation peut \u00eatre par exemple de remplacer le pr\u00e9nom de l&rsquo; utilisateur qui s&rsquo;inscrit par \u00ab\u00a0Jean Michel\u00a0\u00bb et son nom de famille par \u00ab\u00a0A peu pr\u00e8s\u00a0\u00bb dans l&#8217;email de confirmation d&rsquo;inscription.<br><br>Tous vos utilisateurs s&rsquo;appelleront donc Jean Michel A peu pr\u00e8s ( dans les emails uniquement ) \ud83d\ude00<\/p>\n\n\n\n<pre escaped=\"true\" lang=\"php\">\/**\n     * Cette fonction permets de modifier sp\u00e9cifiques des variables de l'email\n     * @param array $params\n     *  [\n     *    'template' =&gt; 'nom_du_template',\n     *    'template_vars' =&gt; &amp;[\/\/tableau des variables de l'email]\n     *  ]\n     *\/\n    public function hookSendMailAlterTemplateVars($params)\n    {\n        \/\/Conditionnement du template\n        if ( $params['template'] == 'account') {\n            \/\/Pour connaitre les variables d\u00e9finies regarder l'email source Ou faire un dump( de $params['template_vars'] )\n         \/\/Les variables \u00e9tant pass\u00e9es par r\u00e9f\u00e9rences il est inutile de faire un return sp\u00e9cifique dans la fonction pour modifier leur valeur\n            $params['template_vars']['{firstname}'] = 'Jean Michel';\n            $params['template_vars']['{lastname}'] = ' A peu pr\u00e8s';\n        }\n    }\n<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/02\/image-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"613\" height=\"484\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/02\/image-1.png\" alt=\"\" class=\"wp-image-2215\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/02\/image-1.png 613w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/02\/image-1-300x237.png 300w\" sizes=\"auto, (max-width: 613px) 100vw, 613px\" \/><\/a><\/figure>\n\n\n\n<p><strong>actionEmailAddBeforeContent<\/strong><\/p>\n<p>Ce hook permet de definir du contenu <strong>avant<\/strong> l&rsquo;affichage du template html appell\u00e9.<br>Nativement son int\u00e9r\u00eat est assez restreint car les templates contiennent d\u00e9j\u00e0 les ent\u00eates html, ajouter du contenu avant sera donc probl\u00e9matique.<br><br>En revanche cela peut \u00eatre utile dans le cas ou vous souhaitez mutualiser le fichier d&rsquo;ent\u00eate entre tous les fichiers , pour les exemples vous pouvez voir l&rsquo;article suivant : <a href=\"https:\/\/www.h-hennes.fr\/blog\/2019\/05\/23\/prestashop-simplification-de-la-mise-en-page-des-emails\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.h-hennes.fr\/blog\/2019\/05\/23\/prestashop-simplification-de-la-mise-en-page-des-emails\/<\/a><\/p>\n<p><strong>actionEmailAddAfterContent<\/strong><\/p>\n<p>Ce hook permet de definir du contenu <strong>apr\u00e8s<\/strong> l&rsquo;affichage du template html appell\u00e9.<br>Nativement son int\u00e9r\u00eat est assez restreint pour ajouter du contenu car les templates contiennent d\u00e9j\u00e0 la fin des balises html, ajouter du contenu apr\u00e8s ne sera donc pas pris en compte.<br><br>Cela reste \u00eatre utile dans le cas ou vous souhaitez mutualiser le fichier de pied de page entre tous les fichiers , pour les exemples vous pouvez voir l&rsquo;article suivant : <a href=\"https:\/\/www.h-hennes.fr\/blog\/2019\/05\/23\/prestashop-simplification-de-la-mise-en-page-des-emails\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.h-hennes.fr\/blog\/2019\/05\/23\/prestashop-simplification-de-la-mise-en-page-des-emails\/<\/a><\/p>\n<p>Sinon ce hook comme vous avez acc\u00e8s au contenu g\u00e9n\u00e9r\u00e9 il est possible de modifier ou de supprimer du contenu du template initial.<br><br>Pour l&rsquo;exemple on va supprimer la variable {shop_name} de l&#8217;email de contact.<br>Un autre cas d&rsquo;utilisation plus concret serait supprimer la mention \u00ab\u00a0Powered by prestashop\u00a0\u00bb situ\u00e9 dans le pied de page de tous les emails ( sans avoir a \u00e9diter les templates \ud83d\ude42 )<\/p>\n\n\n\n<pre escaped=\"true\" lang=\"php\">\/**\n     * Hook appell\u00e9 APRES la r\u00e9cup\u00e9ration du contenu du template de l'email\n     * @param array $params [\n     * 'template' =&gt; $template,\n     * 'template_html' =&gt; &amp;$templateHtml,\n     * 'template_txt' =&gt; &amp;$templateTxt,\n     * 'id_lang' =&gt; (int) $idLang,\n     * ]\n     *\/\n    public function hookActionEmailAddAfterContent($params)\n    {\n        \/\/Pour l'exemple ici on va supprimer la variable {shop_name} du contenu de l'email de contact\n        if ( $params['template'] == 'contact'){\n            $params['template_html'] = str_replace('{shop_name}','',$params['template_html']);\n            $params['template_txt'] = str_replace('{shop_name}','',$params['template_txt']);\n        }\n    }\n<\/pre>\n\n\n\n<p><strong>actionGetExtraMailTemplateVar<\/strong><\/p>\n<p>Ce hook permets de d\u00e9finir des nouvelles variables dans un template email existant.<br>L&rsquo;inconv\u00e9nient est qu&rsquo;il faut modifier le template source pour ajouter les placeholder de vos variables<br>Pour la d\u00e9mo on va rajouter 2 variables dans l&#8217;email de contact<br>{date_envoi} et une {module_modification} <\/p>\n\n\n\n<pre escaped=\"true\" lang=\"php\">\/**\n     * Ce hook permets d'ajouter des nouvelles variables \u00e0 un email existant\n     * L'inconv\u00e9nient est qu'il faut modifier le template source pour ajouter les placeholder de vos variables\n     *\n     * [\n     * 'template' =&gt; $template,\n     * 'template_vars' =&gt; $templateVars,\n     * 'extra_template_vars' =&gt; &amp;$extraTemplateVars,\n     * 'id_lang' =&gt; (int) $idLang,\n     * ],\n     *\n     * @param array $params\n     *\/\n    public function hookActionGetExtraMailTemplateVars($params)\n    {\n        \/\/Ajout de variables personnalis\u00e9es dans l'email de contact\n        if ( $params['template'] == 'contact')\n        {\n            \/\/Les variables sont pass\u00e9s par r\u00e9f\u00e9rences, pas besoin de passer de return\n            $params['extra_template_vars']['{date_envoi}'] = date('Y-m-d H:i:s');\n            $params['extra_template_vars']['{module_modification}'] = $this-&gt;name;\n        }\n    }\n<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/02\/image-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"633\" height=\"265\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/02\/image-2.png\" alt=\"\" class=\"wp-image-2221\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/02\/image-2.png 633w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/02\/image-2-300x126.png 300w\" sizes=\"auto, (max-width: 633px) 100vw, 633px\" \/><\/a><\/figure>\n\n\n\n\n\n<p><strong>actionMailAlterMessageBeforeSend<\/strong><\/p>\n<p>Ce hook renvoie une instance de Swift_Message sur laquelle vous pouvez intervenir.<br>De mon c\u00f4t\u00e9 je n&rsquo;ai pas (encore) trouv\u00e9 d&rsquo;utilit\u00e9 \u00e0 ce hook.<\/p>\n\n\n\n<pre lang=\"php\">\/**\n     * @param array $params\n     * [\n     * 'message' =&gt; &amp;$message, \/\/Instance de Swift_Message\n     * ]\n     *\/\n    public function hookActionMailAlterMessageBeforeSend($params)\n    {\n        \/\/Permets de jouer avec l'objet Swift_Message\n        \/\/ De mon c\u00f4t\u00e9 je n'ai pas eut l'utilis\u00e9 de ce hook\n    }\n<\/pre>\n\n\n\n<p><strong>actionEmailSendBefore<br><br><\/strong>Pour finir c&rsquo;est le hook le plus int\u00e9ressant, puisqu&rsquo;il permets de faire \u00e9norm\u00e9ment de choses au niveau de l&#8217;email, je r\u00e9fl\u00e9chi peut \u00eatre \u00e0 faire un article sp\u00e9cifique \u00e0 ce hook.<br>Voici entre autre ce qu&rsquo;il est possible de faire :<\/p>\n<ul>\n<li>bloquer l&rsquo;envoi de l&#8217;email<\/li>\n<li>changer le template utilis\u00e9 par l&#8217;email<\/li>\n<li>changer le sujet de l&#8217;email<\/li>\n<li>changer le destinataire de l&#8217;email<\/li>\n<li>changer l&rsquo;exp\u00e9diteur de l&#8217;email<\/li>\n<li>ajouter des emails en copie de l&#8217;email<\/li>\n<li>ajouter des variables \u00e0 l&#8217;email<\/li>\n<li>ajouter des pi\u00e8ces jointes \u00e0 l&#8217;email<\/li>\n<li>&#8230;.<\/li>\n<\/ul>\n<p>Pour illustrer mon propos nous allons partir sur les exemples suivant :<\/p>\n<ul>\n<li>Ne pas envoyer d&#8217;email de contact si l&#8217;email est nosend@test.com\n<ul>\n<li>Dans le cas ou le destinataire est une adresse email sp\u00e9cifique \u00ab\u00a0contact@boutique.com\u00a0\u00bb, faire les modifications ci-dessous<\/li>\n<li>changer le sujet de l&#8217;email par \u00ab\u00a0Custom contact subject\u00a0\u00bb<\/li>\n<li>remplacer le nom de l&rsquo;exp\u00e9diteur par \u00ab\u00a0Test Exp\u00e9diteur\u00a0\u00bb<\/li>\n<li>rajouter une variable \u00ab\u00a0{date_envoi}\u00a0\u00bb<\/li>\n<li>rajouter l&rsquo;adresse \u00ab\u00a0test@yopmail.com\u00a0\u00bb en bcc<\/li>\n<\/ul>\n<\/li>\n<li>Envoyer un pi\u00e8ce jointe suppl\u00e9mentaire sur avec l&#8217;email de confirmation de commande<\/li>\n<\/ul>\n\n\n\n<pre escaped=\"true\" lang=\"php\">\/**\n     * Exc\u00e9cut\u00e9 AVANT l'envoi d'un emails\n     * @param array $params [\n     * 'idLang' =&gt; &amp;$idLang,\n     * 'template' =&gt; &amp;$template,\n     * 'subject' =&gt; &amp;$subject,\n     * 'templateVars' =&gt; &amp;$templateVars,\n     * 'to' =&gt; &amp;$to,\n     * 'toName' =&gt; &amp;$toName,\n     * 'from' =&gt; &amp;$from,\n     * 'fromName' =&gt; &amp;$fromName,\n     * 'fileAttachment' =&gt; &amp;$fileAttachment,\n     * 'mode_smtp' =&gt; &amp;$mode_smtp,\n     * 'templatePath' =&gt; &amp;$templatePath,\n     * 'die' =&gt; &amp;$die,\n     * 'idShop' =&gt; &amp;$idShop,\n     * 'bcc' =&gt; &amp;$bcc,\n     * 'replyTo' =&gt; &amp;$replyTo,\n     * ]\n     *\/\n    public function hookActionEmailSendBefore($params)\n    {\n\n         \/**\n         * Actions sur le formulaire de contact\n         *\/\n        if ($params['template'] == 'contact') {\n\n            if ($params['to'] == 'nosend@test.com') {\n                \/\/Sinon on ne veut pas envoyer d'email\n                return false;\n            }\n\n            if ($params['to'] == 'contact@boutique.com' ) {\n\n                $params['from'] = 'modified@test.com';\n                $params['subject'] = 'Custom contact subject';\n                $params['fromName'] = 'Test exp\u00e9diteur';\n                $params['template'] = 'contact_custom';\n                $params['templatePath'] = _PS_MODULE_DIR_.$this-&gt;name . '\/mails\/';\n                \/\/Ajout d'une variable\n                $params['templateVars']['{date_envoi}'] = date('Y-m-d H:i:s');\n                \/\/Ajout d'un email en bcc\n                $params['bcc'] = ['test@yopmail.com'];\n            }\n        }\n\n        \/**\n         * Actions sur l'email de configuration de commande\n         *\/\n        if( $params['template'] == 'order_conf') {\n            \/\/Ex rajout d'un fichier pdf\n            $params['fileAttachment'][] = array(\n                'content' =&gt; file_get_contents(\n                    dirname(__FILE__) . '\/files\/mon-fichier.pdf'\n                ),\n                'name' =&gt; 'mon-fichier.pdf',\n                'mime' =&gt; 'application\/pdf',\n            );\n        }\n\n    }\n<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/02\/image-3.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"609\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/02\/image-3-1024x609.png\" alt=\"\" class=\"wp-image-2223\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/02\/image-3-1024x609.png 1024w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/02\/image-3-300x178.png 300w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/02\/image-3-768x457.png 768w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/02\/image-3.png 1350w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>Nous avons \u00e0 pr\u00e9sent fait le tour des hooks et de modifications possibles dans les emails via les modules.<\/p>\n\n\n\n<p>Vous pouvez t\u00e9l\u00e9charger le module de d\u00e9mo ci-dessous : <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">G\u00e9n\u00e9rer les templates d&#8217;email<\/h3>\n\n\n\n<p>Pour terminer suite \u00e0 la remarque de R\u00e9mi , je vous pr\u00e9cise \u00e9galement qu&rsquo;il est possible de g\u00e9n\u00e9rer les templates de vos emails en d\u00e9finissant uniquement le contenu via des templates twig.<br \/>Je ne d\u00e9taillerais pas le processus car la documentation officielle est tr\u00e8s bien faite sur le sujet : cf. <a href=\"https:\/\/devdocs.prestashop.com\/1.7\/modules\/concepts\/mail-templates\/add-a-layout-from-module\/\" target=\"_blank\" rel=\"noopener\">https:\/\/devdocs.prestashop.com\/1.7\/modules\/concepts\/mail-templates\/add-a-layout-from-module\/<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">T\u00e9l\u00e9charger le module de d\u00e9mo<\/h3>\n\n\n\n<p>je pense avoir \u00e9t\u00e9 assez exhaustif mais n&rsquo;h\u00e9sitez pas \u00e0 partager vos probl\u00e9matiques pour enrichir cet article \ud83d\ude42<br \/>Vous pouvez t\u00e9l\u00e9charger le module de d\u00e9mo ci-dessous<\/p>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/02\/hh_demoemails.zip\">hh_demoemails<\/a><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/02\/hh_demoemails.zip\" class=\"wp-block-file__button\" download>T\u00e9l\u00e9charger<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Dans cet article nous allons creuser tout de qui concerne la gestion des emails dans les modules prestashop. Dans un premier temps comment envoyer un email bien s\u00fbr, mais nous verrons ensuite qu&rsquo;il est tr\u00e8s facile d&rsquo;interagir avec les emails syst\u00e8mes via les hooks. Ce tutoriel s&rsquo;applique \u00e0 la version 1.7 de Prestashop, certains hooks [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[245],"tags":[311,363,104],"class_list":["post-2210","post","type-post","status-publish","format-standard","hentry","category-prestashop-2","tag-emails","tag-hooks","tag-prestashop","prestashop-1-6","prestashop-1-7","prestashop-1-7-7","prestashop-1-7-8","prestashop-8-0","prestashop-8-1"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/2210","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/comments?post=2210"}],"version-history":[{"count":15,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/2210\/revisions"}],"predecessor-version":[{"id":2264,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/2210\/revisions\/2264"}],"wp:attachment":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/media?parent=2210"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/categories?post=2210"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/tags?post=2210"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}