begin process at 2010 09 04 19:24:15
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

E-mail / Messagerie

 > CLIENT POP POUR FAIBLES CONNECTIONS

CLIENT POP POUR FAIBLES CONNECTIONS


 Information sur la source

Note :
Aucune note
Catégorie :E-mail / Messagerie Classé sous :pop, graphique, modem, effacer Niveau :Débutant Date de création :26/01/2006 Vu / téléchargé :3 654 / 118

Auteur : kabot23

Ecrire un message privé
Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

 Description

ce code permet par voie graphique de se connecter a un serveur POP et de recuperer la liste
des 10 messages les plus volumineux (enfin , juste le sujet , qui vous l a envoyé et la taille),et en cliquant ,on peut avoir un extrait du corps du message.Mais surtout , l interet est de pouvoir effacer les gros messages du serveur pop par voie graphique .
c est fonctionnel mais tres tres loin d etre parfait.

Source

  • import socket
  • from poplib import *
  • import gtk
  • import gtk.glade
  • #define constant to represent how many messages will be displayed in listbox
  • MESSAGE_NB=9
  • #define constant to define how many lines of mail are displayed when selecting one in list
  • LINES_NB=50
  • ui = gtk.glade.XML("pophelper.glade")
  • #define default connection icone
  • ui.get_widget("icone").set_from_file("notconnected.png")
  • #define slots
  • #connect button clicked:make the connections and get biggest messages
  • def on_connect(source=None, event=None):
  • #first make a connection
  • global conn
  • global goodlist
  • #inform user we re trying to connect
  • ui.get_widget("connectionstate").set_text("connecting to server...please wait")
  • server= ui.get_widget("server").get_text()
  • user= ui.get_widget("user").get_text()
  • password= ui.get_widget("password").get_text()
  • try:
  • conn=POP3(server)
  • except socket.error:
  • ui.get_widget("connectionstate").set_text("problem with connection")
  • ##return 1
  • #if we are here ,we can connect
  • try:
  • conn.user(user)
  • conn.pass_(password)
  • except:
  • #user/password is incorrect or malformated
  • conn.quit()
  • #after connection, get 10 messages with biggest size and construct listmessages treeview
  • liste=conn.list()[1:2]
  • tube=["liste des tailles des mails"]
  • for i in range(len(liste[0])):
  • tube.append(int(liste[0][i].split()[1]))
  • #now we have list , we need to get MESSAGE_NB most voluminous
  • #create the list where well store all that
  • goodlist=[]
  • for i in range(MESSAGE_NB):
  • goodlist.append((maxetindice(tube)[0],maxetindice(tube)[1]))
  • tube[maxetindice(tube)[0]]=0
  • ##print goodlist
  • #ui.get_widget("connectionstate").set_text("connected to:"+ui.get_widget("server").get_text())
  • ui.get_widget("icone").set_from_file("connected.png")
  • ui.get_widget("totalsize").set_text("espace total occupe:"+str(taille_msg(goodlist))+"ko")
  • #help function that actually fills the listbox with the messages
  • construire_arbre()
  • ui.get_widget("connectionstate").set_text("connected to:"+ui.get_widget("server").get_text())
  • #delete button cliked:delete selected message
  • def on_delete_cliked(source=None, event=None):
  • ui.get_widget("connectionstate").set_text("deleting selected message")
  • #get selected item from listmessages and erase it
  • global goodlist
  • ##print goodlist[ui.get_widget("listmessages").get_cursor()[0][0]][0]
  • conn.dele(goodlist[ui.get_widget("listmessages").get_cursor()[0][0]][0])
  • #we should also blank the textview,the line in the treeview,and maybe notify the
  • #the action done on the bottom of the application
  • #first calculate our goodlist again...
  • liste=conn.list()[1:2]
  • tube=["liste des tailles des mails"]
  • for i in range(len(liste[0])):
  • tube.append(int(liste[0][i].split()[1]))
  • #now we have list , we need to get MESSAGE_NB most voluminous
  • #create the list where well store all that
  • goodlist=[]
  • for i in range(MESSAGE_NB):
  • goodlist.append((maxetindice(tube)[0],maxetindice(tube)[1]))
  • tube[maxetindice(tube)[0]]=0
  • ##print goodlist
  • #quickest way to get tree logically filled again
  • construire_arbre()
  • #quickest way to blank the textview
  • buffer=ui.get_widget("messagebody").get_buffer()
  • buffer.set_text("")
  • #calculate new total size
  • ui.get_widget("totalsize").set_text("espace total occupe:"+str(taille_msg(goodlist))+"ko")
  • #inform that we have deleted
  • ui.get_widget("connectionstate").set_text("message deleted")
  • #quit button cliked:stop current connection(if any)
  • def on_quit(source=None, event=None):
  • global conn
  • try:
  • conn.quit()
  • except:
  • ui.get_widget("connectionstate").set_text("conn died before...sorry")
  • #clear all info about last connection
  • ui.get_widget("connectionstate").set_text("not connected")
  • ui.get_widget("server").set_text("")
  • ui.get_widget("user").set_text("")
  • ui.get_widget("password").set_text("")
  • #ui.get_widget("messagesnb").set_text("")
  • ui.get_widget("icone").set_from_file("notconnected.png")
  • #call construire_arbre with blank parameter set to 1
  • construire_arbre(1)
  • #and clear text area
  • buffer=ui.get_widget("messagebody").get_buffer()
  • buffer.set_text("")
  • #and clear total size label
  • ui.get_widget("totalsize").set_text("espace total occupe:")
  • #cursor on given message:print body of selected message in list
  • def on_listmessages_cursor(source=None, event=None):
  • #get index in listmessages
  • res=ui.get_widget("listmessages").get_cursor()
  • goodnumber=res[0][0]
  • ##print goodnumber
  • ##print goodlist[goodnumber][0]
  • buffer=ui.get_widget("messagebody").get_buffer()
  • #first get real place where the text body begins...
  • nb_firstline=len(conn.top(goodlist[goodnumber][0],1)[1:2][0])-1
  • if not (conn.top(goodlist[goodnumber][0],1)[1:2][0][nb_firstline].startswith("--") or conn.top(goodlist[goodnumber][0],1)[1:2][0][nb_firstline].startswith("This is")):
  • mail=conn.top(goodlist[goodnumber][0],LINES_NB)[1:2][0][nb_firstline:]
  • mytexte=""
  • for text in mail:
  • ##print text
  • mytexte +="\n"+text
  • buffer.set_text(mytexte)
  • else:
  • buffer.set_text("mail is mainly an attachment")
  • #help function that actually fills the listbox with the messages
  • def construire_arbre(clear=0):
  • #goodlist contains the message numbers and their size
  • global goodlist
  • global treestore
  • #creater store with one column
  • treestore = gtk.ListStore(str)
  • ui.get_widget("listmessages").set_model(treestore)
  • cell0 = gtk.CellRendererText()
  • #definition de la colonne 0
  • Col0 = gtk.TreeViewColumn("From"+" "*15+"Subject"+" "*30+"size ", cell0, text=0)
  • ui.get_widget("listmessages").append_column(Col0)
  • if not clear==1: #if clear==1 we wont fill the tree,just use to clear
  • #get 10 messages from: , subject:
  • for i in range(len(goodlist)):
  • #we get the text right....
  • goodlist[i][0]
  • rowbrute= conn.top(goodlist[i][0],1)[1:2][0]
  • fromtxt=""
  • subject=""
  • for j in rowbrute:
  • if j.startswith("From:"):
  • fromtxt=j[5:]
  • if j.startswith("Subject:"):
  • subjecttxt=j[8:]
  • # Add lines corresponding to messages
  • row1= ([fromtxt+"\t"+"\t"+subjecttxt+"\t"+str(int(goodlist[i][1]/1000))+"Ko"])
  • treestore.append(row1)
  • #help function to get max and index in list message
  • def maxetindice(list):
  • liste=list[1:]
  • max=0
  • indice=0
  • for i in range(len(liste)):
  • if max<liste[i]:
  • max=liste[i]
  • indice=i
  • return indice+1,max
  • #help function to get total size of display messages
  • def taille_msg(liste):
  • taille=0
  • for i in liste:
  • taille += i[1]
  • return taille
  • #2-without class:how to connect slots to our functions
  • ui.signal_autoconnect(globals())
  • #main loop waiting for gui events....
  • gtk.main()
import socket
from  poplib import *
import gtk
import gtk.glade



#define constant to represent how many messages will be displayed in listbox
MESSAGE_NB=9
#define constant to define how many lines of mail are displayed when selecting one in list
LINES_NB=50
ui = gtk.glade.XML("pophelper.glade")

#define default connection icone
ui.get_widget("icone").set_from_file("notconnected.png")
#define slots

#connect button clicked:make the connections and get biggest messages
def on_connect(source=None, event=None):
 #first make a connection
 global conn
 global goodlist	
 
 #inform user we re trying to connect
 ui.get_widget("connectionstate").set_text("connecting to server...please wait") 
 server= ui.get_widget("server").get_text()
 user= ui.get_widget("user").get_text()
 password= ui.get_widget("password").get_text()
 try:
  conn=POP3(server)
 except socket.error:
  ui.get_widget("connectionstate").set_text("problem with connection")
  ##return 1 
 
 #if we are here ,we can connect 
 try:
  conn.user(user)
  conn.pass_(password)
 except: 
 #user/password is incorrect or malformated
  conn.quit()
  
 #after connection, get 10 messages with biggest size and construct listmessages treeview
 liste=conn.list()[1:2]
 tube=["liste des tailles des mails"]
 for i in range(len(liste[0])):
  tube.append(int(liste[0][i].split()[1]))
 #now we have list , we need to get MESSAGE_NB most voluminous
 #create the list where well store all that
 goodlist=[]
 for i in range(MESSAGE_NB):
  goodlist.append((maxetindice(tube)[0],maxetindice(tube)[1]))
  tube[maxetindice(tube)[0]]=0
 ##print goodlist
 #ui.get_widget("connectionstate").set_text("connected to:"+ui.get_widget("server").get_text())
 ui.get_widget("icone").set_from_file("connected.png")
 ui.get_widget("totalsize").set_text("espace total occupe:"+str(taille_msg(goodlist))+"ko")
 #help function that actually fills the listbox with the messages
 construire_arbre()
 ui.get_widget("connectionstate").set_text("connected to:"+ui.get_widget("server").get_text())

 #delete button cliked:delete selected message 
def on_delete_cliked(source=None, event=None):
 ui.get_widget("connectionstate").set_text("deleting selected message") 
 #get selected item from listmessages and erase it
 global goodlist
 ##print goodlist[ui.get_widget("listmessages").get_cursor()[0][0]][0]
 conn.dele(goodlist[ui.get_widget("listmessages").get_cursor()[0][0]][0])
  
 #we should also blank the textview,the line in the treeview,and maybe notify the
 #the action done on the bottom of the application
 #first calculate our goodlist again...
 liste=conn.list()[1:2]
 tube=["liste des tailles des mails"]
 for i in range(len(liste[0])):
  tube.append(int(liste[0][i].split()[1]))
 #now we have list , we need to get MESSAGE_NB most voluminous
 #create the list where well store all that
 goodlist=[]
 for i in range(MESSAGE_NB):
  goodlist.append((maxetindice(tube)[0],maxetindice(tube)[1]))
  tube[maxetindice(tube)[0]]=0
 ##print goodlist

 #quickest way to get tree logically filled again
 construire_arbre()
 #quickest way to blank the textview
 buffer=ui.get_widget("messagebody").get_buffer()
 buffer.set_text("")
 
 #calculate new total size
 ui.get_widget("totalsize").set_text("espace total occupe:"+str(taille_msg(goodlist))+"ko")
 #inform that we have deleted
 ui.get_widget("connectionstate").set_text("message deleted")

#quit button cliked:stop current connection(if any)
def on_quit(source=None, event=None):
 global conn
 try:
  conn.quit()
 except: 
  ui.get_widget("connectionstate").set_text("conn died before...sorry")
 #clear all info about last connection 
 ui.get_widget("connectionstate").set_text("not connected")
 ui.get_widget("server").set_text("")
 ui.get_widget("user").set_text("")
 ui.get_widget("password").set_text("")
 #ui.get_widget("messagesnb").set_text("")
 ui.get_widget("icone").set_from_file("notconnected.png")
 #call construire_arbre with blank parameter set to 1
 construire_arbre(1)
 #and clear text area
 buffer=ui.get_widget("messagebody").get_buffer()
 buffer.set_text("")
 #and clear total size label
 ui.get_widget("totalsize").set_text("espace total occupe:")


#cursor on given message:print body of selected message in list
def on_listmessages_cursor(source=None, event=None):
 #get index in listmessages
 res=ui.get_widget("listmessages").get_cursor()
 goodnumber=res[0][0]
 ##print goodnumber
 ##print goodlist[goodnumber][0]
 buffer=ui.get_widget("messagebody").get_buffer()
 
 #first get real place where the text body begins...
 
 nb_firstline=len(conn.top(goodlist[goodnumber][0],1)[1:2][0])-1
 if not (conn.top(goodlist[goodnumber][0],1)[1:2][0][nb_firstline].startswith("--") or conn.top(goodlist[goodnumber][0],1)[1:2][0][nb_firstline].startswith("This is")):
  mail=conn.top(goodlist[goodnumber][0],LINES_NB)[1:2][0][nb_firstline:]
  mytexte=""
  for text in mail:
   ##print text
   mytexte +="\n"+text
  buffer.set_text(mytexte)               
 else:             
  buffer.set_text("mail is mainly an attachment")
            
#help function that actually fills the listbox with the messages
              
def construire_arbre(clear=0):
 #goodlist contains the message numbers and their size 
 global goodlist
 global treestore
 #creater store with one column
 treestore = gtk.ListStore(str)
  
 ui.get_widget("listmessages").set_model(treestore)
 cell0 = gtk.CellRendererText()
 #definition de la colonne 0
 Col0 = gtk.TreeViewColumn("From"+" "*15+"Subject"+" "*30+"size ", cell0, text=0)
 ui.get_widget("listmessages").append_column(Col0)

 if not clear==1:  #if clear==1 we wont fill the tree,just use to clear
  #get 10 messages from: , subject:
  for i in range(len(goodlist)):
   #we get the text right....
   goodlist[i][0]
   rowbrute= conn.top(goodlist[i][0],1)[1:2][0]
   fromtxt=""
   subject=""
   for j in rowbrute:
    if j.startswith("From:"):
     fromtxt=j[5:]
    if j.startswith("Subject:"):
     subjecttxt=j[8:]
  # Add lines corresponding to messages
   row1= ([fromtxt+"\t"+"\t"+subjecttxt+"\t"+str(int(goodlist[i][1]/1000))+"Ko"])
   treestore.append(row1)
  
 
#help function to  get max and  index in list message
def maxetindice(list):
 liste=list[1:]
 max=0
 indice=0
 for i in range(len(liste)):
    if max<liste[i]:
     max=liste[i]
     indice=i 
 return indice+1,max


#help function to get total size of display messages
def taille_msg(liste):
 taille=0
 for i in liste:
  taille += i[1]
 return taille
 
#2-without class:how to connect slots to our functions
ui.signal_autoconnect(globals())
#main loop waiting for gui events....
gtk.main()

 Conclusion

ce serait bien sur plus simple a coder (voire plus efficace) en ligne de commandes mais mon interet etait surtout de reutiliser glade,donc glade requis pour faire marcher le tout...

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

SCRIPT CGI MAILER GENERIQUE
Source avec Zip GENERATEUR DE CODE SSCC
Source avec Zip FENETRES POPUP EN RESEAU

 Sources de la même categorie

VÉRIFIER SES MAILS AVEC TUX DROID par KimbleMandel
SCANNER D' ADRESSES MAILS (ENTREPRISES, MESSAGERIES, BOITE ... par kerneltony95
Source avec Zip Source avec une capture SPAMMEUR, PYTHON par xeolin
Source avec Zip Source avec une capture ENVOI D'EMAIL + INTERFACE GRAPHIQUE par xeolin
ENVOI D'EMAIL par sorcier0011

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture LE CALCULATOR DE RAYGOLD VERSION 3.1 par raygold
TK_WATCH :HORLOGE GRAPHIQUE par afranck64
Source avec une capture DESSIN DE DÉS À ÉCHELLE VARIABLE SUR CANVAS par calogerogigante
Source avec Zip JEU DE LA VIE AVEC TKINTER par dia100daly
Source avec Zip Source avec une capture GRAPHEUR DE FONCTIONS MATHÉMATIQUES par amaury74

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

wxpython : afficher et effacer des images [ par steede ] Bonjour,J'ai besoin dans mon application d'affiicher des images et de les remplacer par d'autres en fonction des clics de la souris.Je sais les affich Librairie graphique vectoriel [ par DoudouBidou ] Bonjour, j'ai depuis quelques jour un projet en t&#234;te, celui de r&#233;aliser un logiciel de saisi de sch&#233;ma &#233;lectrique en python. Effacer le contenu d'un dossier [ par lolo38550 ] Bonjour à tous!Je suis débutant en Python (mon language "naturel" est le C/C++). Pour commencer à me familiariser avec ce language, j'aimerai créer un Effacer un objet [ par Shakan972 ] Bonsoir tout le monde j'aimerais savoir comment est-ce que l'on faisait pour effacer un objet crée à partir de la bibliothèque Tkinter par exemple une Appel d'une fonction [ par Thomeux ] Bonjour,Je débute en python.J'essais de structurer mon Programme de la manière suivante         :Un fichier bibliothèque fonction,          :Un Fichi Pop-up personnalisé [ par Lacro59 ] Bonjour, En regardant un peu les différentes documentations sur wx.TaskBarIcon et wx.Menu pour la création d'un menu pop-up, je me demandais si :- il Probleme de conception [ par JoeNamat ] Bonjour a vous,Je ne suis pas un tres bon programmeur et j'ai programme une interface graphique en python avec PyGTK. Cette interface graphique interr Développement d'un logiciel de calculs en Python [ par icornato ] Bonjour à tousIngénieur dans un BE, j'ai développé un programme d'environ 10 000 lignes en VB pour effectuer du calcul d'éléments poutre (calcul matri Python et Octave"matlab" [ par soufianovich ] Bonjour, je suis stagiaire dans une entreprise, jai fait un code octave ou"matlab" c'est la meme chose qui traite mes données. Maintenant je suis en t Python et octave [ par soufianovich ] Bonjour, je suis stagiaire dans une entreprise, jai fait un code octave ou"matlab" c'est la meme chose qui traite mes données. Maintenant je suis en t


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales