Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CLIENT POP POUR FAIBLES CONNECTIONS


Information sur la source

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

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

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


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,421 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.