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

Ruby Discussion :

compteur de messages sur mon serveur imap


Sujet :

Ruby

  1. #1
    Membre expérimenté

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Par défaut compteur de messages sur mon serveur imap
    Bonjour

    Je développe un petit script qui permet de compter le nombre des messages non lus dans mon dossier principal INBOX ainsi que ses sous-dossiers sur mon serveur imap. Voici le script:
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    #!/usr/local/bin/env ruby
     
    require 'net/imap'
    require 'base64'
     
    m0 = "INBOX"
    m1 = "INBOX.forums.developpez"
    m2 = "INBOX.forums.fug"
    m3 = "INBOX.lists.freebsd-announce"
    m4 = "INBOX.lists.freebsd-ports"
    m5 = "INBOX.lists.freebsd-questions"
    m6 = "INBOX.lists.openbox-questions"
    m7 = "INBOX.lists.openbsd-announce"
    m8 = "INBOX.services.ovh"
    m9 = "INBOX.services.free"
    m10 = "INBOX.Spam"
     
    imap = Net::IMAP.new('imp.nameserver.org')
    imap.login('nom@server.org',Base64.decode64('password'))
     
    for i in m0;m1;m2;m3;m4;m5;m6;m7;m8;m9;m10
         imap.select(i)
         value = imap.search(['NOT','SEEN'])
         if value.empty? == false
             printf "#{value.nitems}"
         else
             printf "No"
         end
         imap.disconnect
    end
    Le code compte uniquement le contenu de la variable m0 mais pas les autres

    Qu'en pensez-vous ?

    Merki

  2. #2
    Membre expérimenté
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Par défaut
    essaie peut-être ça :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    #!/usr/local/bin/env ruby
     
    require 'net/imap'
    require 'base64'
     
    m = ["INBOX",
          "INBOX.forums.developpez",
          "INBOX.forums.fug",
          "INBOX.lists.freebsd-announce",
          "INBOX.lists.freebsd-ports",
          "INBOX.lists.freebsd-questions",
          "INBOX.lists.openbox-questions",
          "INBOX.lists.openbsd-announce",
          "INBOX.services.ovh",
          "INBOX.services.free",
          "INBOX.Spam"]
     
    imap = Net::IMAP.new('imp.nameserver.org')
    imap.login('nom@server.org',Base64.decode64('password'))
     
    m.each { |i|
         imap.select(i)
         value = imap.search(['NOT','SEEN'])
         if value.empty? == false
             printf "#{value.nitems}"
         else
             printf "No"
         end
         imap.disconnect
    }
    Je suis pas sûr de ton for in (même quasi sûr qu'il marche pas...)

    PS : est-ce que ton disconnect dans ta boucle est une bonne idée ?

    Edit : j'ai corrigé ma déclaration de tableau, php a fait des dégats sinon, tu peux le déclarer comme suit pour pas toucher de teop à ta syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    m = Array.new()
     
    m[0] = "INBOX"
    m[1] = "INBOX.forums.developpez"
    m[2] = "INBOX.forums.fug"
    m[3] = "INBOX.lists.freebsd-announce"
    m[4] = "INBOX.lists.freebsd-ports"
    m[5] = "INBOX.lists.freebsd-questions"
    m[6] = "INBOX.lists.openbox-questions"
    m[7] = "INBOX.lists.openbsd-announce"
    m[8] = "INBOX.services.ovh"
    m[9] = "INBOX.services.free"
    m[10] = "INBOX.Spam"
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  3. #3
    Membre expérimenté

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Par défaut
    Je viens de tester le code ci-dessus et j'obtiens le message suivant:
    checkimap.rb:6: undefined local variable or method `m' for main:Object (NameError)
    Le imap.disconnect est utile car la vérification se produit toutes les 10 minutes. Il faut mieux dans ce cas la fermer directement.

    Pour le for in, tu as raison, je viens de regarder sur le wiki et est indiqué qu'il vaut mieux itérer en utilisant les méthodes adaptées.

    Merki de ton aide

  4. #4
    Membre expérimenté
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Par défaut
    j'ai corrigé mon code sans doute pendant que tu répondait

    Mais mettre le disconnect en sortie de boucle me parait plus adapté (sans connaitre ce module), je voit mal comment tu va checker le 2° en te déconnectant en fin de première itération...
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  5. #5
    Membre expérimenté

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Par défaut
    Tu as entièrement raison pour le disconnect, j'ai corrigé. Le code fonctionne mais il n'additionne pas le nombre de messages.

    Lorsque j'exécute le script, j'obtiens l'affichage suivant:
    Je devrais obtenir logiquement 32

  6. #6
    Membre expérimenté
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Par défaut
    ça me seble parfaitement normmal, puisque tu réinitialise value à chaque affectation... pour avoir et le total et le détail, fait comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    total = 0
    m.each { |i|
         imap.select(i)
         value = imap.search(['NOT','SEEN'])
         if value.empty? == false
             printf "#{value.nitems}"
             total = total + value.nitems
         else
             printf "No"
         end
    }
    imap.disconnect
    puts total
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  7. #7
    Membre expérimenté

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Par défaut
    Je suis vraiment un newbi de première ceci dit, il calcule bien le nombre total de messages mais l'affichage n'est pas bon, le voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    33 0 0 0 0 2 0 0 0 0 0 35
    Je veux juste le total

  8. #8
    Membre expérimenté
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Par défaut
    il suffit que tu suppries ton printf

    (et du coup, soit total soit value deviennent inutile..)
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  9. #9
    Membre expérimenté

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Par défaut
    Je suis d'accord avec toi mais l'affichage n'est toujours pas bon car en sortie, j'obtiens ceci:
    Tu vas pas me dire que je dois faire de totaux un pour les nouveaux messages et un pour les mailboxes vides ?

    Je ne vais pas supprimer non plus le printf "0" car s'il n'y a aucun messages, il faut qu'il affiche 0 new messages!

    Merki

  10. #10
    Membre expérimenté
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Par défaut
    vire tes deux printf, il affichera 0 puisque total est initialisé à 0 au pire
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  11. #11
    Membre expérimenté

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Par défaut
    Tout fonctionne, c'est parfait. Merci pour avoir réalisé ce code

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

Discussions similaires

  1. Affichage des messages d'erreur sur mon serveur
    Par philippe57460 dans le forum Langage
    Réponses: 4
    Dernier message: 25/06/2008, 08h23
  2. Message d'erreur étrange sur mon serveur
    Par irnatene dans le forum Mandriva / Mageia
    Réponses: 3
    Dernier message: 28/11/2006, 14h20
  3. Kmail veux pas marcher sur mon serveur avec postfix
    Par jean christophe dans le forum Réseau
    Réponses: 4
    Dernier message: 06/05/2005, 01h02
  4. Réponses: 3
    Dernier message: 09/12/2004, 11h49
  5. Paramétrer le nombre de connexion sur mon serveur Mysql
    Par Zerga dans le forum Installation
    Réponses: 2
    Dernier message: 12/12/2003, 19h21

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