snouffy wrote:Mais il doit y avoir une solution parceque j'ai déjà eu des widgets qui me donnaient le nombre de mails non lus sans avoir à utiliser ton astuce Temet. Et puis si on supprime un message sur le serveur et que dans la foulée on en reçoit un autre il se passe rien ! Enfin, je finirai bien par trouver l'astuce qui fera tout marcher 🙂.
Regarde dans les "applet" superkaramba, il y en à un tas écrit en python et je serais pas étonné qu'il y en ai un pour vérifier la présence de mails non lus.

L'astuce de Temet devrait le faire aussi, j'avais utilisé le même workaround avec l'api javamail pour vérifier la présence de mails non lus sur un serveur pop (l'avantage c'est que le code fonctionnera avec pop et imap).
@alcapcom : c'est aussi ce que m'a conseillé Temet ^^... Je regarderai ça à l'occasion pour l'instant je m'amuse avec Amarok, et, oh miracle, ça marche !!! Bon seul petit problème, une mise à jour de l'affiche de l'écran LCD rend inutilisable la souris pendant un peu moins d'une seconde : faut pas changer de musique trop souvent !!! :-P
Ca y est je viens de comprendre !!! Quand j'utilisais des widgets me donnant le nombre de messages sur mon compte mail, ils ne me donnaient pas le nombre de messages "non lus" mais simplement le nombre total de message... C'était à une époque où je ne laissais pas mes messages sur le serveur !!! Et pour ce qui est des scripts superkaramba que j'ai pu trouver, qu'ils soient en perl ou en python, ils font tous pareil : ils regardent simplement le nombre total de messages sur le serveur !!!!!!

J'ai la tête qui bouillonne... :-D
Bon ben ça y est j'ai trouvé la solution qui fait tout marcher comme promis... Enfin, disons plutôt que j'ai contourné le problème. Alors, en ma qualité de Snouffy, j'ai décidé que le protocol pop3 était tout pourri. Donc, en attendant que Yahoo! passe à l'IMAP, je redirige tous mes mails vers un de mes comptes Free (chez Free ils ont bien sûr implémenté l'imap). Et comme avec l'imap on peut tout faire, ça marche très bien presque tout seul ^^...

Voilà, le premier jet de mon programme est terminé et testé par mes soins, tout marche bien. Il va falloir maintenant que je me plonge encore un peu plus dans le python (n'interpretez pas mal cette phrase) pour pouvoir le rendre accessible à tout le monde, enfin, disons aux heureux possesseurs d'un clavier MX5000.
Je te conseille de lire mes messages un peu plus haut. Personnellement, via Imap, mon compte m'indique 82 messages non lus alors que j'en ai aucun! ^^
Oui j'ai vu ça... Mais pour ma part ça a l'air de très bien marcher après quelques tests... Peut-être que tu devrais changer de fournisseur mail :-P. Si tu as python sous la main et que tu veux tester un bout de code :
server,username,passwd="imap.blablabla","nom_du_compte","mot_de_passe"
def check_mails(server,username,passwd):
    M = imaplib.IMAP4(server)
    M.login(username,passwd)
    M.select(readonly=1)
    typ, data = M.search(None, "(UNSEEN)")
    data=string.split(data[0])
    nombre_messages=len(data)

    if (typ == 'OK') & (nombre_messages>0):
        message_id=int(data[nombre_messages-1])  #On ne regarde que le dernier message arrivé
        (ret, mesginfo) = M.fetch(message_id, '(BODY.PEEK[HEADER.FIELDS (SUBJECT FROM)])')
        if ret == 'OK':
            t=mesginfo[0][1]
            t=t.replace("""\r\n""","")
            t=t.replace("""<""","")
            t=t.replace(""">""","")
            t=t.split('Subject: ')
            auteur=t[0]
            auteur=auteur.replace("From: ","")
            sujet=t[1]
        else:
            print "Problème de communication avec le server mail :"
            print ret
    M.logout()
    return nombre_messages, auteur, sujet

nombre_messages, auteur, sujet=check_mails(server,username,passwd)
print nombre_message, auteur, sujet
C'est sûrement très mal écrit mais ça a l'air de marcher chez moi :-D... Sur ce je vais aller m'attaquer à PyQt ^^
Effectivement, ça marche!!!!
Bon, j'ai du corriger deux trois trucs :
> import imaplib, string
> "print nombre_messages, auteur, sujet" à la place de "print nombre_message, auteur, sujet"

Mais ça marche très bien!!!

C'est malin je vais devoir me replonger dans mon C++ alambiqué! ^^

EDIT : je viens de comprendre !!!!!!!!!!
En fait, j'ai pas 82 mails non lus, mais le mail numéro 82 est non lu!!!! (c'est un mail que je me suis envoyé à moi même et que je laisse non lu exprès pour m'en occuper quand j'aurai le temps!!)

Merci mon grand! 😃
bonjour snouffy
j'aimerai moi aussi me mettre a la programmation python
Peux tu m'indiquer ou tu as trouvé un tuto?...
@Temet : pardon pour la faute de frappe j'ai recopié et réarrangé mon script un peu vite (il a fallu que j'enlève une petite partie de mon programme, celle qui gère l'écran LCD)... Content que ça marche chez toi ^^ ! Pour info, mais je pense que tu t'en es rendu compte, la variable data est juste un tableau avec le numéro des messages non lus 🙂. Et le "BODY.PEEK" est, à ce que j'ai pu lire, un vilain hack remplaçant "BODY" qui évite de marquer le message comme lu.

@chepioq : je suis pas sur mon ordi je vais l'allumer et je te donne les liens que j'ai ^^

Edit : Voilà ce que j'ai utilisé pour commencer :
http://fr.wikibooks.org/wiki/Apprendre_%C3%A0_programmer_avec_Python
(pour l'instant j'ai fait que les 8 premiers chapitres et ça me suffit)
j'ai aussi un peu utilisé la bibliothèque de réference de python, voilà un lien vers la française (qui est incomplète malheureusement mais l'anglaise est lisible) :
http://quentel.pierre.free.fr/python-trad/lib.html
et surtout, j'ai utilisé google pour trouver des réponses à mes questions bien spécifiques 🙂
@snouffy pour trouver du code tu peux aussi utiliser http://www.google.com/codesearch et http://www.koders.com

Juste un petit truc qui me frape est:
t=t.replace("""\r\n""","")
t=t.replace("""<""","")
t=t.replace(""">""","")

que tu serais remplacer par:
t=t.replace("""\r\n""","").replace("""<""","").replace(""">""","")

Bah je viens de vérifié et le replace de Python ne prend pas de regexp dans le premier argument, c'est con... en Java tu aurais pu écrire t.replace("\r\n|<|>", "") et te tour aurais été joué.

Bon coding 😉
Ok merci j'en prends note ^^·
Quant à l'avancement de mon projet, moi qui peste toujours quand il n'y a pas d'interface graphique je me suis forcé à en faire une, c'est marrant mais pas toujours facile 🙂. Par exemple je ne peux pas utiliser d'interface graphique faite avec qt quand le module pydcop est chargé !!! C'est un peu gênant mais finalement j'ai coupé mon programme en deux, une fenêtre graphique pour la configuration et le programme principal à faire tourner en fond...

Par contre j'ai un petit problème au niveau du stockage de mot de passe. C'est "mal" de stocker un mot de passe dans un fichier texte non ? Alors comment je fais pour que mon programme stock un mot de passe et ne le demande pas à chaque fois que je le démarre (mot de passe du server mail) ? J'ai bien trouvé le module getpass() qui a l'air de chercher le mot de passe relatif à la session en cours, mais ça n'est pas satisfaisant.

Autre chose, quand la version 0.1 de mon projet sera stable, si je veux la partager, où dois-je la mettre ? kde-look.org ?

Merci 🙂
Ca a l'air sympa ^^... Mais tant qu'à faire j'aimerais bien trouver un truc qui ne soit pas dépendant de la plateforme (quoi ? Je rêve ?) même si mon programme sert pour AmaroK la fonction mail est à mon sens la plus utile (en fait chez moi j'ai désactivé la fonction amaroK l'utilisation excessive de l'écran LCD de mon clavier faisant méchamment bugger ma souris).

Mais maintenant que j'ai un nom je peux faire des recherches !! Merci 🙂

Edit : je me lis en me balladant que c'est l'équivalent du KDE Wallet et j'ai horreur de ce truc sous KDE ^^... Mais peut-être que c'est moins lourd que sous Gnome. Ceci dit c'est une solution d'utiliser ce genre de programmes.
Je pense pas qu'une solution non dépendante de l'environnement de bureau n'existe, je dis ça car j'ai lu quelque part que NetworkManager stock les clefs dans gnome-keyring quand t'es sous Gnome et dans K Wallet (merci;-)) quand t'es sous KDE.

Bah, en attendant tu sais peut être faire la même chose qu'eux, si le Wallet KDE est facilement "accédable" en python.
Oui je vais voir ça c'est une bonne solution à laquelle je n'avais pas pensé. Ceci dit le Kwallet à quelque chose d'énervant c'est de venir ouvrir sa grande bouche pour demander un mot de passe dès le démarrage de la session pour peu qu'une application en ayant besoin se démarre avec l'ordi. J'ai lu grâce à ton lien (merci encore au passage) que sous Gnome on pouvait demander au gestionnaire de mots de passe de s'ouvrir tout seul sans demander de mot de passe. Et sous KDE il existe une solution qui consiste à mettre "" comme mot de passe pour Kwallet mais bon...

Je pense que je m'arrangerai pour laisser le choix à l'utilisateur de la méthode de sauvegarde du mot de passe... Moi le fichier texte me convient ^^
Perso moi c'est stocké en clair.
La solution simple serait un cryptage réversible avec les clés en dur. C'est cassable certes facilement ... encore plus vu que les sources sont libres.
Perso, j'aime pas kwallet, il est désactivé.
Ta solution est sûrement la plus simple et la plus facile à réaliser... Même si les sources sont libres, si quelqu'un a accès à un dossier /home et qu'il tombe direct sur un fichier de config avec un mot de passe ça craint... Alors que s'il est crypté il va sûrement passer son chemin. Et même si les sources sont disponibles, faudrait qu'il s'embête à aller les chercher pour regarder la clef, etc, etc... Bref, ça peut être une bonne solution intermédiaire.

J'en profite donc au passage pour te demander ce que je dois chercher sur glouglou pour trouver mon bonheur, n'y connaissant rien en cryptographie, si ce n'est les quelques exos de maths que j'ai pu faire la-dessus 🙂...

Edit : et tant que j'y suis, si quelqu'un sait comment à partir de mes fichiers .py je peux faire une jolie archive avec un "make" "make install" ça serait sympa de me donner un lien 🙂.
Ma solution est sans doute plus chiante à réaliser oui! ^^

Quoique, tu fais une rotation aléatoire des lettres (genre a->g, y->o, etc)... c'est uber-simple mais... vu que le fichier est non compilé, n'importe qui lit la source peut le retrouver facilement... ca évite juste un accès direct.

Sinon, tu n'as pas de make à faire, vu que tu n'as pas à compiler.
Pour le make install (qui est dans un Makefile), il suffit de lui dire ou copier le fichier mais... m'est d'avis qu'un rpm serait aussi simple à réaliser... t'as juste à lui dire de copier dans /usr/bin ou /usr/local/bin 😉
Je verrai la création de rpm après je préfererais déjà faire quelque chose d'accessible à toutes les distributions.

Pour le mot de passe je vais donc sans doute m'amuser à faire un truc tout pourri qui échange les lettres, le but n'étant pas trop de sécuriser l'affaire mais comme tu le dis d'éviter un accès direct.