Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail



Documents pareils
3IS - Système d'exploitation linux - Programmation système

Cours 6 : Tubes anonymes et nommés

Cours Programmation Système

Compression de Données - Algorithme de Huffman Document de Conception

Introduction au langage C

Procédure Création : 04/05/2009 ARCHIVAGE DE LA MESSAGERIE

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Le prototype de la fonction main()

Programmation système de commandes en C

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Les structures de données. Rajae El Ouazzani

Cours Langage C/C++ Programmation modulaire

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Les structures. Chapitre 3


Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

TP2 : tableaux dynamiques et listes chaînées

TP réseaux 4 : Installation et configuration d'un serveur Web Apache

Java Licence Professionnelle CISII,

Sage CRM. 7.2 Guide de Portail Client

Initiation. àl algorithmique et à la programmation. en C

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Cours de C. Allocation dynamique. Sébastien Paumier

Le langage C. Séance n 4

OS Réseaux et Programmation Système - C5

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

TRAVAUX PRATIQUES Programmation Système Langage C / Système UNIX. 2 e année Génie Informatique

Mon premier rpm. 7 juin Avant de commencer RPM URPMI RPMBUILD... 2

Chapitre 1 : La gestion dynamique de la mémoire

Testez votre installation. Créer un répertoire vide

Les processus. Système L3, /39

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

MANUEL INSTALLATION. GANESHA version 4. Editeur Anéma SAS Département Développement

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence

Chapitre 10 : Logiciels

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Outils pour la pratique

Guide utilisateur Archivage intermédiaire Messagerie. Enterprise Connect pour Outlook 2010 EC V 1.0

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

INITIATION A LA PROGRAMMATION

PARAMETRAGE CONSOLE ADMINISTRATION DE MESSAGERIE "VENDOME.EU" NOTICE UTILISATION

Bases de programmation. Cours 5. Structurer les données

Gestion de la mémoire

Un duo de choc : DocuWare et Microsoft Outlook

Archivage des mails dans Outlook 2010

I. Introduction aux fonctions : les fonctions standards

Programmation Système (en C sous linux) Rémy Malgouyres LIMOS UMR 6158, IUT département info Université Clermont 1, B.P.

GESTION DES FICHIERS C/UNIX

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Le système de gestion des fichiers, les entrées/sorties.

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères

contact@nqicorp.com - Web :

Poker. A rendre pour le 25 avril

Derrière toi Une machine virtuelle!

Programmation en langage C

Installation 1K-Serveur

Chap III : Les tableaux

Cours de Système : Gestion de Fichiers

Service WEB, BDD MySQL, PHP et réplication Heartbeat. Conditions requises : Dans ce TP, il est nécessaire d'avoir une machine Debian sous ProxMox

TP1 : Initiation à Java et Eclipse

Installation de Windows 2000 Serveur

Seagate Technology LLC S. De Anza Boulevard Cupertino, CA 95014, États-Unis

Programmation système I Les entrées/sorties

Exercice sur les Dockers

VD Négoce. Description de l'installation, et procédures d'intervention

Acronis Backup & Recovery 10 Server for Linux. Guide de démarrage rapide

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Faire fonctionner symfony sous wamp et windows avec des vhost. Installation de wamp

INF 104 (SELC) Introduction au langage C

Conventions d écriture et outils de mise au point

MINIMUM. connaissances nécessaires à la programmation des microcontrôleurs PIC18 en langage C (une introduction au langage c A.N.S.

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Nécessité de concevoir un outil de recherche PDF Présentation des fonctionnalités d'indexation et de recherche... 3

Plan du cours. Historique du langage Nouveautés de Java 7

Université de Lausanne

Septembre 2012 Document rédigé avec epsilonwriter

inviu routes Installation et création d'un ENAiKOON ID

Utilisation d'un réseau avec IACA

Activité sur Meteor. Annexe 1 : notion de client-serveur et notion de base de données

#include <stdio.h> #include <stdlib.h> struct cell { int clef; struct cell *suiv; };

Les débordements de tampons et les vulnérabilités de chaîne de format 1

Algorithmique I. Algorithmique I p.1/??

Configuration de plusieurs serveurs en Load Balancing

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Note : Ce tutoriel a été réalisé sur GNU/Linux (Ubuntu) avec un serveur LAMP installé en local.

Programmation par les Objets en Java

Manuel utilisateur. des. listes de diffusion. Sympa. l'université Lille 3

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Avantages de l'archivage des s

Auteur LARDOUX Guillaume Contact Année 2014 DEVELOPPEMENT MOBILE AVEC CORDOVA

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Guide de Migration du Serveur IceWarp

FreeNAS Shere. Par THOREZ Nicolas

GLPI (Gestion Libre. 2 ième édition. Nouvelle édition. de Parc Informatique)

Gestion de contenu d un site web avec TYPO3 Manuel de l administrateur

Transcription:

Finalités Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail Réalisé par sa modestie Arnaud de VILLEDON de NAIDE, le 9 mars 2013 Document sous licence GPL. Vous avez le droit d'en faire des copies, des améliorations. Si vous le vendez, je vous laisse 1 % (et oui, la vie est dure) Pensez à indiquer l'origine de vos copies SVP Il faut parfois vider sa messagerie. Toutefois, l'accès aux messages archivés peut être très utile, ET DE MANIERE CONVIVIALE. J'utilise personnellement, sous Evolution, des dossiers sous la réception, jusqu'au niveau 3 MAX. J'avais effectué un programme d'archivage, il y a 4 ans, mais l'architecture d'evolution a changé. De plus, avoir une page générale "index.html" à la racine de ma sauvegarde était à l'époque effectuée de manière manuelle. Maintenant, un deuxième programme comble ce vide. Programmes réalisés sur environnement : Système d'exploitation Ubuntu 12.04 Logiciel Hypermail 2.3.0 patchlevel 1 - Sat Mar 9 00:24:54 2013 Logiciel Evolution 3.2.3 (il faut l'installer. C'est simple!). http://sourceforge.net/projects/hypermail/ En date du 09-03-2013 La programmation est réalisée en langage "C" (merci Dennis) Plan du document Vue de base d'evolution Structure interne des fichiers et dossiers Programme de Création de l'archivage de toute l'arborescence (merci Hypermail) : programme archiveevolution2.c Correction du petit bug hypermail pour les accents (pour les froggies comme moi) Programme d'indexage de chaque dossier pour créer des hypertextes : programme creearbohtml.c

Vue de base d'evolution avec les dossiers Comme on peut le voir, je n'utilise pas de profondeur supérieure à 3. Si vous avez plus profond, il faudra modifier le programme n 2. Structure des fichiers d'evolution Maintenant, les dossiers sont sous "$HOME/.local/share/evolution/mail/local". La nouvelle architecture interne des dossiers et fichiers d'evolution s'est simplifiée : chaque dossier est de la forme..dossier.sous-dossier1.sous-dossier2 Donc plus besoin d'effectuer de la récursivité dans chaque dossier. Maintenant, rentrons dans un dossier. Par exemple le dossier "amis". Il contient un sous-dossier "cur" qui contient les mails. Bon alors rien de bien terrible...

archiveevolution2.c #include <stdio.h> #include <sys/types.h> #include <dirent.h> #include <sys/stat.h> #include <unistd.h> #include <stdlib.h> #include <string.h> char arbo[50][50]; char commande[250]; char archivedest[100]; void transfochemin(char *src,char *dest) int i=(src[0]=='.')?2:0,j=0; while(src[i]) char c=(src[i]!='.')?src[i]:'/'; dest[j++]=c; i++; dest[j]=0; void lis(int niveau,char *nomrep) DIR *d,*dm; struct dirent *de,*dem; struct stat stat_p; time_t tt; int premier=1,i; char buf[100],reponse[10],nomrep[200]; if((d=opendir(nomrep))==null) fprintf(stderr,"impossible d'ouvrir %s\n",nomrep); perror("archiveevolution"); exit(1); if(chdir(nomrep)!=0) fprintf(stderr,"[lis %02d] : impossible d'entrer dans %s\n",niveau,nomrep); printf("[lis %02d] : Entrée dans %s\n",niveau,nomrep); while(de=readdir(d)) // permet de savoir si c'est un répertoire... int stat_e=stat(de->d_name,&stat_p); if(stat_p.st_mode & S_IFDIR) // on enlève le '.' et le '..'. Par contre ne pas enlever les dossiers..quelquechose if(strcmp(de->d_name,".")!=0 && strcmp(de->d_name,"..")!=0 && strncmp(de->d_name,"..",2)==0) int nbmails=0; transfochemin(de->d_name,nomrep); printf("- %s --> %s\n",de->d_name,nomrep); chdir(de->d_name); chdir("cur"); if((dm=opendir("."))==null) fprintf(stderr,"impossible d'ouvrir %s/cur\n",de->d_name); perror("archiveevolution"); exit(2); while(dem=readdir(dm)) if(strcmp(dem->d_name,".")!=0 && strcmp(dem->d_name,"..")!=0) printf("\t- Mail %s\n",dem->d_name); sprintf(commande, "hypermail -u -m %s -o hm_reverse=1 -o hm_language=fr -d %s/%s -l %s 2>/dev/null", dem->d_name,archivedest,nomrep,nomrep); printf("%s\n",commande); system(commande); nbmails++; printf("\t***** Total=%d *****\n",nbmails); chdir("../..");

int main(int c,char **v) char repevol[100]; if(c==2) // on cherche l'emplacement du 'home' de l'utilisateur sprintf(repevol,"%s/.local/share/evolution/mail/local",getenv("home")); strcpy(archivedest,v[1]); // le dossier d'archivage existe-t-il? if(chdir(v[1])!=0) printf("le répertoire %s n'existe pas!\n",v[1]); printf("je me place dans %s!\n",v[1]); lis(0,repevol); printf("il manque un argument...\n"); printf("syntaxe : %s <Dossier d'archivage>\n",v[0]); printf("exemple : %s /media/multimedia/archivemails/2009-03-25\n",v[0]); Compilation : gcc -o archev2 archiveevolution2.c Exécution :./archev2 dossier_archivage il a fallu créer ce dossier auparavant Petit bug d'accent sur Hypermail Nos amis anglo-saxons ont fait un mini-bug : certains accents graves sont décris en HTML comme des &eagrave ; et non comme des &egrave ; Il suffit d'aller dans le dossier archive et taper la commande : find./* type f exec sed i 's/eagrave/egrave/g' \; Programme d'indexation des dossiers archivés #include <stdio.h> #include <sys/types.h> #include <dirent.h> #include <sys/stat.h> #include <unistd.h> #include <stdlib.h> #include <string.h> typedef struct int niveau; char url[200]; char shortname[50]; PileArbo; PileArbo pile[100]; int nbpile=0; int niveauprecedent(int i) if(i==0) return 0; return (pile[i].niveau)-(pile[i-1].niveau); int NiveauSuivant(int i) if(i>nbpile-1) return 0; return (pile[i+1].niveau==pile[i].niveau); void empile(int prof,char *lib, char *shortn) pile[nbpile].niveau=prof; strcpy(pile[nbpile].url,lib+1); strcpy(pile[nbpile].shortname,shortn); nbpile++; void copie(pilearbo *dest,pilearbo *src)

dest->niveau=src->niveau; strcpy(dest->url,src->url); strcpy(dest->shortname,src->shortname); void tripile() int i=0; while(i<nbpile-1) if(strcmp(pile[i].url,pile[i+1].url)>0) PileArbo temp; copie(&temp,pile+i); copie(pile+i,pile+i+1); copie(pile+i+1,&temp); if(i>0) i--; i++; void affpile() int i; for(i=0;i<nbpile;i++) printf("niveau %d ; Url '%s' ; short '%s'\n",pile[i].niveau,pile[i].url,pile[i].shortname); char archivedest[100]; void lis(int niveau,char *nomrep,char *arbo) DIR *d; struct dirent *de; struct stat stat_p; char arboconc[200]; if((d=opendir(nomrep))==null) fprintf(stderr,"impossible d'ouvrir %s\n",nomrep); perror("creearbo"); exit(1); sprintf(arboconc,"%s/%s",arbo,nomrep); if(chdir(nomrep)!=0) fprintf(stderr,"[lis %02d] : impossible d'entrer dans %s\n",niveau,nomrep); printf("[lis %02d] : Entrée dans %s (%s)\n",niveau,nomrep,arboconc); while(de=readdir(d)) // permet de savoir si c'est un rãépertoire... int stat_e=stat(de->d_name,&stat_p); if(strcmp(de->d_name,"index.html")==0) printf("trouvé l'index dans le dossier %s!\n",nomrep); empile(niveau,arboconc,nomrep); if(stat_p.st_mode & S_IFDIR) // on enlève le '.' et le '..' if(strcmp(de->d_name,".")!=0 && strcmp(de->d_name,"..")!=0 && strncmp(de->d_name,"att-",2)!=0) printf("trouvé le dossier %s. J'y rentre!\n",de->d_name); lis(niveau+1,de->d_name,arboconc); chdir(".."); void creehtml() char nomindex[200]; FILE *po; int i; sprintf(nomindex,"%s/index.html",archivedest); po=fopen(nomindex,"w"); fprintf(po,"<html>\n\t<body>\n\t\t"); for(i=1;i<nbpile;i++) int np=niveauprecedent(i); if(np>0)

char niv; switch(pile[i].niveau) case 1 : niv='a'; break; case 2: niv='1'; break; case 3 : niv='a'; break; fprintf(po,"<ol type='%c'>\n",niv); if(np<0) fprintf(po,"</ol>\n"); fprintf(po,"<li><a href='%s/index.html'>%s</a></li>\n",pile[i].url,pile[i].shortname); fclose(po); int main(int c,char **v) if(c==2) strcpy(archivedest,v[1]); // le dossier d'archivage existe-t-il? if(chdir(v[1])!=0) printf("le répertoire %s n'existe pas!\n",v[1]); printf("je me place dans %s!\n",v[1]); lis(0,".",""); printf("***************************************\n"); tripile(); affpile(); creehtml(); printf("il manque un argument...\n"); printf("syntaxe : %s <Dossier d'archivage>\n",v[0]); printf("exemple : %s /media/data/sauvemail/sauvemail_2013-02-21\n",v[0]); Le programme, une fois compilé, demande à l'exécution le nom du dossier dans lequel on a archivé les mails. Résultat (moche mais fonctionnel) Ca, c'est le résultat du deuxième programme Et ça, le boulot d'hypermail That's all, folks! Bonne chance à tous! Ne suivez personne ; cultivez-vous!