Perles de Mongueurs : Récupérer ses mails
Signature : | Mis en ligne le : 18/02/2008
Catégorie(s) :
  • GNU/Linux Magazine
  • | Domaine :
    Commentez creative commons
     

    Retrouvez cet article dans : Linux Magazine 79

    Avec un titre pareil, vous allez vous dire que ça part mal : pour récupérer ses mails, on utilise son client mail (quel qu’il soit), et ça marche très bien. Exact, je préfère ça aussi. Mais récemment, suite à un déménagement, je me suis retrouvé coupé de tout accès au net, et donc dans l’impossibilité de récupérer mes mails. Or je reçois environ 200 mails par jour et autant de spams. Et le quota sur Free n’est que de 25 Mo. Donc au bout d’un mois, mon compte s’est dangereusement rapproché de la limite supérieure, et il me fallait récupérer mes mails avant que les suivants ne soient refusés. La réponse toute faite de la plupart des personnes est d’utiliser Fetchmail. Sauf que Fetchmail tient absolument à renvoyer les mails sur un serveur qui se chargera de les délivrer (un MDA, Mail Delivery Agent). C’est une solution, mais je voulais simplement récupérer mes mails, les stocker tous dans un simple fichier au classique format mbox. A priori, Fetchmail ne permet pas de faire ça. Voici donc un petit script Perl pour récupérer les mails par POP3. Vous reconnaîtrez, dans le début du script, celui présenté il y a un an et demi pour vérifier son compte POP3. Il est augmenté d’une boucle qui récupère les messages l’un après l’autre et les stocke dans le fichier dont le nom a été donné en argument du script. Détaillons son déroulement. Après s’être connecté ($pop = new Net::POP3 $server), authentifié ($pop->login($login, $passwd)) et avoir récupéré le nombre de mails à lire ($pop->popstat), une boucle se charge de traiter chaque message. À noter qu’elle commence à 1 et non 0. On télécharge chaque message avec $pop->get($num), qui le renvoie sous la forme d’une référence à un tableau de lignes. On le passe à la fonction mbox_envelope() dont le rôle est d’ajouter une ligne au format From EXPEDITEUR DATE. Cette ligne, dite d’enveloppe, contient l’adresse de l’expéditeur telle qu’elle a été donnée au serveur mail d’envoi avec la commande SMTP MAIL FROM:, suivie de la date d’envoi. On la reconstitue en prenant la valeur du champ Return-Path:, s’il est présent, qui contient justement cette adresse, et sinon en prenant celle du champ From:. Cela peut sembler inutile mais cette ligne d’enveloppe, qui précède les en-têtes RFC-822, est nécessaire pour que le fichier soit au format mbox et que les clients mails puissent ensuite le lire. Cette ligne est ensuite insérée en début du tableau qui contient le message. Puis celui-ci est stocké dans le fichier, et le message est marqué pour destruction sur le serveur POP3. À noter que les messages ne sont effectivement détruits que lorsqu’on exécute $pop->quit(), donc jusqu’à ce moment-là, le script peut à tout moment être interrompu sans que cela n’affecte vos mails sur le serveur. On peut noter que ce script utilise, en plus du module Net::POP3, le module Email::Simple du projet PEP [1] (Perl Email Project). Ce projet initié par Simon Cozens consiste à fournir des modules plus propres et plus simples que ceux qui existaient avant dans Mail::* (y compris les siens). Il faut reconnaître qu’ici, son nom en ::Simple n’est pas abusif puisque l’interface est très naturelle : on passe le message en argument de new(), et on peut récupérer chaque en-tête avec la méthode header(). La prochaine fois que vous avez besoin d’un module Perl pour manipuler les mails, je vous recommande donc très chaudement de regarder d’abord les modules du projet PEP, qui sont véritablement simples à utiliser, même s’ils souffrent parfois d’un certain manque de documentation. Enfin, pour ceux qui se demanderaient si j’ai vraiment utilisé ce script, je réponds " oui ", et même plus d’une fois. Au total, j’ai ainsi pu récupérer les quelques 6000 mails (hors spam) qui se sont accumulés en deux mois sur mon compte. Liens : [1] http://pep.kwiki.org/
    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...