Perles de Mongueurs (32)
Signature : | Mis en ligne le : 23/11/2007
Catégorie(s) :
  • GNU/Linux Magazine
  • | Domaine :
    Commentez creative commons
    Depuis le numéro 59, les Mongueurs de Perl vous proposent tous les mois de découvrir les scripts jetables qu’ils ont pu coder ou découvrir dans leur utilisation quotidienne de Perl. Bref, des choses trop courtes pour en faire un article, mais suffisamment intéressantes pour mériter d’être publiées. Ce sont les perles de Mongueurs.

    Préparation artisanale d’un mailing

    Mon épouse est enseignante et elle a récemment dit à ses élèves qu’elle allait, suite à une absence, leur envoyer par mail leur note au dernier devoir, individuellement. Les notes sont disponibles dans un fichier gnumeric, avec les noms des élèves. Elle veut cependant se laisser la possibilité de rajouter éventuellement un message personnalisé. Sans envoyer automatiquement des emails en masse à partir d’un fichier, je voulais lui faciliter la vie autant que possible. L’objectif est donc de prendre la liste des notes et de produire un message pour chaque élève de la classe dans sa boîte de " brouillons " (sous Pine, c’est le fichier ~/mail/postponed-msgs).

    Template Toolkit pour produire les messages

    Qui dit message formaté, dit utilisation d’un modèle. Nous n’allons pas nous encombrer de détails. Aussi, vais-je me servir de l’outil utilisé pour tous les sites des Mongueurs et qui est de plus déjà installé sur ma machine : Template Toolkit. Le mail sera défini dans un modèle, les emails, noms et notes des élèves le seront dans un fichier (obtenu à partir de son tableur). Nous allons donc produire un message au format mbox qu’il suffira ensuite d’ajouter à la fin de ~/mail/postponed-msgs. Le plus simple est évidemment d’écrire un brouillon de message avec Pine et de le sauver pour une édition ultérieure (postpone). Voici le résultat brut tel que sauvegardé par Pine : Bref, c’est l’horreur : il y a plein d’en-têtes dont on se moque (et certains sont de plus supposés être des identifiants uniques ; nous devrions éviter de créer des doublons), le contenu du message est en multipart-MIME encodé en quoted-printable... Heureusement, Pine n’est pas si bête et sait travailler à partir d’une version minimale d’un message copié dans un fichier au format mbox. Le texte suivant suffit amplement : Quand on sauvegarde le message après vérification dans Pine, on constate que Pine l’a sauvé sous une forme similaire à notre premier exemple. Parfait. Pour utiliser notre outil de template, il suffit de remplacer deux lignes dans notre message épuré :
    • la ligne To: des en-têtes :
    • et la ligne du message contenant la note :
    On a remplacé les informations cruciales par les variables du modèle : [% prenom %], [% nom %], [% email %] et [% note %]. C’est avec [% %] que l’on peut insérer des directives Template Toolkit dans n’importe quel document^Wmodèle.

    Regexp::Assemble pour trouver les adresses

    Il reste cependant un petit problème pratique... Trouver l’email de chaque élève. En effet, si la plupart des adresses sont de la forme Prenom.Nom@grande-ecole.fr, ce n’est pas le cas pour toutes les adresses. L’administration a parfois dû ajouter les seconds prénoms pour gérer des problèmes d’homonymie. Heureusement, Estelle dispose des adresses email de tous ses élèves. Il reste donc à établir la correspondance entre le nom d’un élève dans le fichier de notes et son email dans la liste d’adresses. En fait, tout le travail a déjà été fait par David Landgren, l’auteur de Regexp::Assemble (que nous avons déjà vu dans la Perle 29). Regexp::Assemble peut produire des regexps " suivies " (tracked), c’est-à-dire qu’il est capable de retrouver laquelle des regexps ayant servi à la construire a déclenché la correspondance. Il suffit ensuite d’ajouter les expressions avec add(). Dans les quelques classes dont elle a la charge, il n’y a pas deux élèves qui portent le même nom. Nous allons donc utiliser les noms de famille des élèves comme clés d’un hachage dont les valeurs sont les adresses correspondantes, sans nous préoccuper des problèmes d’homonymie. Cette technique de table de correspondance basée sur des expressions régulières est extrêmement puissante, et d’une grande simplicité à mettre en œuvre grâce au travail de David. Au final, le script est assez court : Ce script affiche le résultat sur la sortie standard, afin de faciliter la vérification des messages produits. Pour ajouter les messages aux brouillons de Pine, il suffit de faire : Il ne lui restera plus qu’à vérifier les messages et à les envoyer. Quant à moi, j’ai enfin pu utiliser les regexps suivies de Regexp::Assemble, et, surtout, j’ai une nouvelle fois réussi à convaincre ma douce de l’intérêt d’avoir un Mongueur de Perl à la maison ! ;-)
    Vous souhaitez commenter cet article ?
    Brèves Flux RSS
    Édito : GNU/Linux Magazine 149
    Édito : GNU/Linux Magazine HS N°60
    Édito : Misc 61
    Édito : Linux Pratique 71
    Édito : Linux Essentiel N°25
    Communication RSS Com. RSS Presse
    Lancement de la plateforme de vente en ligne de PDF des Éditions Diamond ! Un...
    Misc N°61 – Communiqué de presse
    GNU/Linux Magazine N°149 – Communiqué de presse
    GNU/Linux Magazine HS N°60 – Communiqué de presse
    Linux Pratique N°71 – Communiqué de presse
    prochainement moteur de recherches des articles
     
    :
    :
    Jours heures minutes secondes
    En kiosque Flux RSS

    Le tout nouveau GNU/Linux Magazine est disponible dès maintenant chez votre marchand de journaux et sur notre site marchand.

    Découvrez le sommaire de ce numéro et un aperçu de ce magazine...

    Lire la suite...

    Le tout nouveau Misc est disponible dès maintenant chez votre marchand de journaux et sur notre site marchand.

    Découvrez le sommaire de ce numéro et un aperçu de ce magazine...

    Lire la suite...

    Le tout nouveau Linux Pratique est disponible dès maintenant chez votre marchand de journaux et sur notre site marchand.

    Découvrez le sommaire de ce numéro et un aperçu de ce magazine...

    Lire la suite...

    Le tout nouveau GNU/Linux Magazine HS est disponible dès maintenant chez votre marchand de journaux et sur notre site marchand.

    Découvrez le sommaire de ce numéro et un aperçu de ce magazine...

    Lire la suite...

    Le tout nouveau Linux Essentiel est disponible dès maintenant chez votre marchand de journaux et sur notre site marchand.

    Découvrez le sommaire de ce numéro et un aperçu de ce magazine...

    Lire la suite...

    Le tout nouveau Misc HS est disponible dès maintenant chez votre marchand de journaux et sur notre site marchand.

    Découvrez le sommaire de ce numéro et un aperçu de ce magazine...

    Lire la suite...