IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes POSIX Discussion :

Récupération de données de mails et mise en forme des données récupérées


Sujet :

Shell et commandes POSIX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 116
    Par défaut Récupération de données de mails et mise en forme des données récupérées
    Bonjour à tous,

    Voici mon problème :

    Des mails sont envoyés à une adresse qui les convertit en fichiers .txt
    Sur ces fichiers .txt, je dois récupérer l'expéditeur du mail (le From), le destinataire (le To) et la date d'envoi.
    La conversion des mails en fichiers .txt donne cela :

    From: "DUPONT Pierre [CERA]" <dupont.pierre@gmail.fr>
    To: =?iso-8859-1?Q?MARTIN_Julien_=5BCERA=5D?=
    <julien.martin@gmail.fr>
    Subject: SAV AGENCE
    Thread-Topic: SAV AGENCE
    Thread-Index: Ac+JYBcZ/f1fG23NS82TEygEo3u5mw==
    Date: Mon, 16 Jun 2014 14:45:08 +0200
    Pour l'instant mon code est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    #echo "Recuperation de l'expediteur"
    #EXPEDITEUR=$(awk 'BEGIN {FS = ":";} $1 == "From" {print $0;}' ${SAVAGE_HOME}/fichiers/SAV_AGENCE__91bc915d93b2803546aaf344ace9527cc9e3c06f5b7a1d2b19adeaf02893d01b.txt)
    #
    #echo "Recuperation de la date"
    #DATE_ENVOI=$(awk 'BEGIN {FS = ":";} $1 == "Date" {print $0;}' ${SAVAGE_HOME}/fichiers/SAV_AGENCE__91bc915d93b2803546aaf344ace9527cc9e3c06f5b7a1d2b19adeaf02893d01b.txt)
     
    RES=$(awk 'BEGIN {FS = ":"; varFrom = ""; varTo = ""; varDate = ""; flag = 0;}
    $1 == "Subject" {flag=0;}
    flag == 1 {varTo = varTo $0;}
    $1 == "From" {varFrom = $0;}
    $1 == "To" {varTo = $0; flag=1;}
    $1 == "Date" {varDate = $0;}
    END {print varFrom "µ"; print varTo "µ"; print varDate;}' ${SAVAGE_HOME}/fichiers/SAV_AGENCE__91bc915d93b2803546aaf344ace9527cc9e3c06f5b7a1d2b19adeaf02893d01b.txt)
     
    echo ${RES} | IFS="µ" read EXPEDITEUR DESTINATAIRE DATE_ENVOI
     
    $EXPEDITEUR = 
     
    echo "EXPEDITEUR=${EXPEDITEUR}"
    echo "DESTINATAIRE=${DESTINATAIRE}"
    echo "DATE_ENVOI=${DATE_ENVOI}"

    Et me permet de récupérer les données sous cette forme :

    EXPEDITEUR=From: "DUPONT Pierre" <pierre.dupont@gmail.fr>
    DESTINATAIRE= To: =?iso-8859-1?Q?MARTIN_Julien_=5BCERA=5D?=
    <julien.martin@gmail.fr>
    DATE_ENVOI= Date: Mon, 16 Jun 2014 14:45:08 +0200

    Mon problème concerne en fait la mise en forme de ces données récupérées :
    - J'aimerais récupérer seulement l'adresse mail qui est entre <> pour l'expéditeur
    - Idem pour le destinataire (à noter que pour l'instant je récupère le destinataire sur deux lignes et c'est seulement la 2ème qui m'intéresse)
    - Pour la date, j'aimerai la convertir en JJ/MM/AAAA


    Merci d'avance pour votre aide !

  2. #2
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    Voici une piste à explorer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $ cat test.txt 
    From: "DUPONT Pierre [CERA]" <dupont.pierre@gmail.fr>
    To: =?iso-8859-1?Q?MARTIN_Julien_=5BCERA=5D?=
    <julien.martin@gmail.fr>
    Subject: SAV AGENCE 
    Thread-Topic: SAV AGENCE 
    Thread-Index: Ac+JYBcZ/f1fG23NS82TEygEo3u5mw==
    Date: Mon, 16 Jun 2014 14:45:08 +0200
    $ grep "^From" test.txt|egrep -o "[A-Za-z0-9\._]+@[A-Za-z0-9\._]+"
    dupont.pierre@gmail.fr
    $ grep "^<" test.txt|egrep -o "[A-Za-z0-9\._]+@[A-Za-z0-9\._]+"
    julien.martin@gmail.fr
    $ date +"%d/%m/%Y" -d "$(grep "^Date:" test.txt|cut -d " " -f2-)"
    16/06/2014
    Cordialement,
    Idriss

  3. #3
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 378
    Par défaut
    Bonjour,

    Voici sinon, un réarrangement de ton script awk:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    $ cat file_mail.txt 
    From: "DUPONT Pierre [CERA]" <dupont.pierre@gmail.fr>
    To: =?iso-8859-1?Q?MARTIN_Julien_=5BCERA=5D?=
    <julien.martin@gmail.fr>
    Subject: SAV AGENCE 
    Thread-Topic: SAV AGENCE 
    Thread-Index: Ac+JYBcZ/f1fG23NS82TEygEo3u5mw==
    Date: Mon, 16 Jun 2014 14:45:08 +0200
    $ RES=$(awk 'BEGIN {FS = "[<>]"; varFrom = ""; varTo = ""; varDate = ""; flag = 0;}
    /^Subject:/ {flag=0;}
    flag == 1 {varTo = varTo $2;}
    /^From:/ {varFrom = $2;}
    /^To:/ {varTo = $2; flag=1;}
    /^Date:/ {sub(/^Date: */,"");varDate=$0}
    END {print "EXPEDITEUR="varFrom ; print "DESTINATAIRE="varTo ; system("date +\"DATE=%d/%m/%Y\" -d \""varDate"\"");}' file_mail.txt)
    $ echo "$RES"
    EXPEDITEUR=dupont.pierre@gmail.fr
    DESTINATAIRE=julien.martin@gmail.fr
    DATE=16/06/2014
    Ici, je ne crée pas les variables EXPEDITEUR,DESTINATAIRE et DATE et il faudra certainement l'amélioré si tu a plusieurs destinataires sur la même ligne...

  4. #4
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 116
    Par défaut
    Merci pour vos réponses. J'ai réussi à avancer concernant ma récupération de données :

    Voici le code que j'ai mis en place :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    RES=$(awk 'BEGIN {FS = ":"; varFrom = ""; varTo = ""; varDate = ""; flag = 0; vPdeb=0; vPfin=0;} 
     
    $1 == "Subject" {flag=0;} 
     
    flag == 1 {varTo = varTo $0; vPdeb=index(varTo,"<");vPfin=index(varTo,">"); varTo = substr(varTo,vPdeb+1,vPfin-vPdeb-1); } 
     
    $1 == "From" {vPdeb=index($0,"<");vPfin=index($0,">");varFrom = substr($0,vPdeb+1,vPfin-vPdeb-1);} 
     
    $1 == "To" {varTo = $0; flag=1;} 
     
    $1 == "Date" {vPdeb=index($0,",")+1;vPfin=index($0,"+")-1; varDate = substr($0,vPdeb+1,vPfin-vPdeb-1);} 
     
    END {print sprintf("export EXPEDITEUR=%s;export DESTINATAIRE=%s;export DATE_ENVOI=\"%s\"",varFrom,varTo,varDate);}' ${SAVAGE_HOME}/fichiers/SAV_AGENCE__91bc915d93b2803546aaf344ace9527cc9e3c06f5b7a1d2b19adeaf02893d01b.txt) 
     
    echo "$RES"

    Et voici ce que je récupère :


    export EXPEDITEUR=pierre.dupont@gmail.fr;export DESTINATAIRE=julien.martin@gmail.fr;export DATE_ENVOI="16 Jun 2014 14:45:08"

    Mon problème est désormais de pouvoir récupérer ces données sous cette forme :

    EXPEDITEUR=pierre.dupont@gmail.fr;
    DESTINATAIRE=julien.martin@gmail.fr;
    DATE_ENVOI="16 Jun 2014 14:45:08"

    Je ne vois pas trop comment faire cela. Donc si vous avez une idée ?

    Merci d'avance

  5. #5
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print sprintf("export EXPEDITEUR=%s;export DESTINATAIRE=%s;export DATE_ENVOI=\"%s\"",varFrom,varTo,varDate);
    Pourquoi faire printf de sprintf ?
    Pourquoi écrire "export" ici sachant que ça ne sera pas exécuté par bash et que visiblement ça ne correspond pas à la sortie attendue ?
    Pourquoi mettre des ";" si tu veux des retours à la ligne ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("EXPEDITEUR=%s\nDESTINATAIRE=%s\nDATE_ENVOI=\"%s\"", varFrom, varTo, varDate);
    Cordialement,
    Idriss

  6. #6
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 116
    Par défaut
    J'ai réussi à récupérer ce que je souhaitais, voilà mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    read EXPEDITEUR <<<$(awk -F "[<> ]" '/^From:/ {print $(NF-1)} ' ${SAVAGE_HOME}/fichiers/SAV_AGENCE__91bc915d93b2803546aaf344ace9527cc9e3c06f5b7a1d2b19adeaf02893d01b.txt)
     
    DESTINATAIRE=$(awk 'BEGIN {FS = ":";  varTo = "";  flag = 0;}
    $1 == "Subject" {flag=0;}
    flag == 1 {vPdeb=index($0,"<");vPfin=index($0,">"); varTo = varTo ";" substr($0,vPdeb+1,vPfin-vPdeb-1) ";";}
    $1 == "To" {vPdeb=index($0,"<");vPfin=index($0,">"); varTo = substr($0,vPdeb+1,vPfin-vPdeb-1); flag=1;}
    END {print varTo;}' ${SAVAGE_HOME}/fichiers/SAV_AGENCE__91bc915d93b2803546aaf344ace9527cc9e3c06f5b7a1d2b19adeaf02893d01b.txt)
     
    DATE_ENVOI=$(awk 'BEGIN {FS = ":"; varDate = ""; flag = 0; vPdeb=0; vPfin=0;}
    $1 == "Date" {vPdeb=index($0,",")+1;vPfin=index($0,"+")-1; varDate = substr($0,vPdeb+1,vPfin-vPdeb-1);}
    END {print sprintf("export DATE_ENVOI=\"%s\"",varDate);}' ${SAVAGE_HOME}/fichiers/SAV_AGENCE__91bc915d93b2803546aaf344ace9527cc9e3c06f5b7a1d2b19adeaf02893d01b.txt)
    eval "$DATE_ENVOI"
     
    echo "EXPEDITEUR=${EXPEDITEUR}"
    echo "DESTINATAIRE=${DESTINATAIRE}"
    echo "DATE_ENVOI=${DATE_ENVOI}"

    et voici ce que je récupère :

    EXPEDITEUR=pierre.dupont@gmail.fr
    DESTINATAIRE=julien.martin@gmail.fr
    DATE_ENVOI=16 Jun 2014 14:45:08
    Le problème que je rencontre désormais est que j'aimerai intégrer ces résultats dans 3 variables VarFrom, VarTo, et VarDate.

    J'ai essayé avec ce code mais ça ne fonctionne pas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    varFrom=$(EXPEDITEUR)
    varTo=$(DESTINATAIRE)
    varDate=$(DATE_ENVOI)
    Merci d'avance pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mise en forme des données sous Excel
    Par mhamedbj dans le forum Cognos
    Réponses: 2
    Dernier message: 27/08/2011, 17h00
  2. [2008] Mise en forme des données
    Par Valochette dans le forum SSRS
    Réponses: 2
    Dernier message: 12/05/2011, 10h34
  3. [MySQL] probleme de mise en forme des données
    Par arakiri dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 01/06/2007, 12h01
  4. [MySQL] Mise en forme des données
    Par Silborn dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 27/12/2006, 19h00
  5. Réponses: 6
    Dernier message: 16/06/2006, 15h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo