Aller au contenu

October 15, 2013

1

Envoyer des mails grâce à la fonction Mail::Send() de Prestashop

Dans le cas d’une boutique en ligne l’envoi d’ emails est très important pour communiquer avec vos clients.
Je vais vous présenter une fonction de prestashop très simple et utile pour envoyer des mails avec en complément un template que vous pourrez mettre en forme facilement !

La classe Mail et sa fonction Send()

Commençons par le code, je vous expliquerai ensuite le fonctionnement de ce dernier.

global $cookie;
 
$subject = 'Bonjour';
$donnees = array('{nom}'  => 'Jobs' ,  '{prenom}'  => 'Steve' );
$destinataire = [email protected]';
 
Mail::Send(intval($cookie->id_lang), 'montemplate', $sujet , $donnees, $destinataire, NULL, NULL, NULL, NULL, NULL, 'mails/');

Dans un premier temps, nous initialisons diverses variables qui contiennent le sujet du mail, les données que ce dernier comprendra (oui oui, on peut mettre des variables dans les mails :) ) ainsi que l’adresse mail du destinataire.

Ces variables seront utilisées dans la fonction ‘Send()’ de la classe ‘Mail’. J’utilise des variables pour mettre toutes les informations d’envoi du mail, cela permet une meilleure clarté.

Voyons maintenant la fonction en détails, elle comprends beaucoup de paramètres :

  1. L’id de la langue [ ici intval($cookie->id_lang), variable cookie qui récupère l'id de la langue actuelle ]
  2. Le nom du template [ ici 'montemplate' ]
  3. Le sujet [ ici 'Bonjour' ]
  4. Un tableau contenant les données à placer dans le template [ ici $donnees ]
  5. Le destinataire [ ici [email protected]' ]
  6. Le nom du destinataire [ ici NULL ]
  7. L’adresse mail de l’émetteur [ ici NULL ]
  8. Le nom de l’émetteur [ ici NULL ]
  9. Une pièce jointe [ ici NULL ]
  10. Le mode SMTP [ ici NULL ]
  11. Le chemin vers le dossier contenant le template [ ici le dossier mails à la racine ]

Le template

Rendez-vous dans le dossier mails/fr , c’est là que notre fonction va aller chercher le fichier template que nous lui avons indiqué. (rappelez-vous : ‘mails/’)

Vous devez impérativement créer deux fichiers, un .txt et un .html portant tout les deux le nom de votre template ( ici  ‘montemplate’ ).
Créez donc les fichiers montemplate.txt et montemplate.html dans le dossier mails/fr/.

Le fichier html est celui utilisé pour le template du mail, avec donc du code html.
Le fichier txt est utilisé au cas où le destinataire n’arrive pas à lire le mail, il contient alors du texte brut.

Ajoutons maintenant du contenu dans notre fichier montemplate.html :

<h1>Bonjour {prenom} {nom}</h1>

Puis pour notre fichier montemplate.txt :

Bonjour {prenom} {nom}

A ce stade, votre fonction d’envoi de mail est opérationnelle. n’hésitez pas à personnaliser votre template et d’ajouter autant de variables que vous souhaitez !

Un soucis ? Postez un commentaire !

Publié par
Plus d'articles pour la catégorie Tutoriels
10 Commentaires Poster un commentaire
  1. Maxime
    May 4 2012

    La première variable sujet est écrite en anglais: $subject.
    Du coup, petit bug.

    Merci pour le tuto!

    Reply
  2. Jul 11 2012

    Bonjour,
    Merci pour ce tuto, je cherche à savoir comment attacher 2 pièces jointes au mail ?

    Reply
  3. Stephane
    Aug 24 2012

    J’essaie de faire un module en reutilisant cette fonction, mais ma methode d’envoi est dans l’environnement le SMTP, je dois mettre le 10 = true ?
    Par ailleurs dans mon module je dois faire un
    include(dirname(__FILE__).’/../../classes/Mail.php’); ou include(dirname(__FILE__).’/../../config/config.inc.php’); ?
    Merci d’avance

    Reply
    • Aug 24 2012

      Inutile de faire un iclude dans ton module, s’il est bien fait, tu peux récupérer toutes les objets que tu veux.

      Reply
      • Stephane
        Aug 24 2012

        Merci pour ta reponse rapide
        Bon c’est incompréhensible j’ai tout essayé je seche depuis des heures, mon presta a changé la methode de mail() par envoi SMTP
        Du coup j’ai modif dans l’admin, le systeme fonctionne, par contre les modules que j’avais acheté basé sur mail() ne fonctionnent plus

        je viens d’essayé avec
        $sujet = ‘Bonjour’;
        $donnees = array(‘{nom}’ => ‘Jobs’ , ‘{prenom}’ => ‘Steve’ );
        $destinataire = ‘[email protected]’;

        Mail::Send(intval($cookie->id_lang), ‘password’, $sujet , $donnees, $destinataire, “nom prenom”, NULL, NULL, NULL, NULL,dirname(__FILE__).’/mails/’);

        aucun email de poster, par contre quand dans l’admin section mail je fais un test du SMTP je recois bien un email…

        Merci pour le tuto en tout cas

        Reply
        • Stephane
          Aug 24 2012

          Merci grace a ton tuto j’ai compris !!
          J’avais une erreur dans ma template

          Reply
  4. Dec 7 2012

    Bonjour Emilen,
    Merci pour ce tuto, c’est assez rare de trouver ce genre d’info.
    Je suis actuellement coincé sur un problème qui devrait pourtaant être assez simple.
    Je travaille sous presta 1.5.2 et je cherche à ajouter un bouton sur la page produit indiquant “contactez nous au sujet de ce produit”.
    en html, un bête :
    href=”mailto:[email protected] ?subject=info sur produit “
    ferait l’affaire seulement voila, en cas de reception de nombreux mail, il serait préférable de pouvoir identifier de quel page produit ce mail provient en mettant par example le nom du produit dans le sujet du mail. .
    Sela pourrait être fait avec un
    href=”mailto:[email protected] ?subject=”-{$product-name|escape:’htmlall’:'UTF-8′}
    seulement voila… ça, ca ne fonctionne pas!
    de plus, si le bouton pouvait être de type :
    class=”buttons_bottom_block” href=”javascript:{ldelim}{rdelim}” class=”button”>{l s=’Contact us about this car’}
    ce serait vraiment la classe!!!
    j’ai posté des questions un peu partout mais pas de réponses pour le moment. j’espère que tu pourras m’aider mais, quoi qu’il en soit, je te remercie déjà d’avoir pris le temps de me lire.
    Amicalement,
    Michel.

    Reply
  5. Anonymous
    Dec 6 2013

    Bonjour, je cherche à envoyer aussi un mail comme stéphane avec SMTP via un controller admin que j’ai overridé, je n’ai pas réussi avec ces bouts de codes à valider mon envoi de mail.

    J’ai la config SMTP qui est bonne le mail teste s’envoi bien mais sur mon controller j’ai ajouté les exemples ci-dessous mais rien ne s’affiche. Comment tu as trouvé ta solution Stéphane ?

    Quelqu’un serait-il comment procéder, je’ai créer une méthode private envoiMail dans mon dossier override du controller admin (AdminProductsController.php) mais rien n’y fait ce mail ne veut pas partir je veux dupliquer le mail de l’alerte stock qui est dans le module alerte mails, pouvez-vous m’apporter une piste, merci.

    Je suis parti de la méthode :
    public function hookActionUpdateQuantity($params)
    dans modules\mailalerts\mailalerts.php mais il me semble que çà provient peut-être du fait qu’une partie des variables sont vides… Qu’en pensez-vous?

    Reply
  6. Jerome
    Dec 11 2013

    Bonjour,

    je tente depuis 2 semaines de faire un envoi de mail avec la fonction Mail::Send, mais je coince lamentablement….
    Rien ne part…
    Pour info, je suis sur un presta 1.5.5.0 et quand je fais “Envoyer un mail de test”, il arrive bien
    Voila ce que j’ai fait :
    Mail::Send(
    (int)$cookie->id_lang, // langue
    ‘mailContactPerso’, // nom du fichier template SANS L’EXTENSION
    $this->l(‘Un nouveau message a été envoyé’), // sujet à traduire dans les langues du module
    $donnees,
    $destinataire, // destinataire mail
    NULL, // destinataire nom
    strval(Configuration::get(‘PS_SHOP_EMAIL’)), // expéditeur
    strval(Configuration::get(‘PS_SHOP_NAME’)), // expéditeur nom
    NULL, // fichier joint
    NULL, // Choix SMTP, non traité par le coeur < PS 1.4.6.1, donc inutile
    dirname(__FILE__).'/mails/' // répertoire des mails templates
    );

    J'ai vérifié toutes mes variables, elle contiennent bien les bonnes valeurs.
    Puis quand j'aurai réussi à faire ça, il me faudra en plus mettre une pièce jointe… mais là j'y suis pas encore….

    Merci par avance de votre aide

    Reply

Partagez votre opinion, postez un commentaire.

(requis)
(requis)

Note: Le HTML est autorisé. Votre e-mail (ne sera pas publié).

S'abonner aux commentaires


2 + 6 =