aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/mold_remover.py
diff options
context:
space:
mode:
authorRob Funk <rfunk@funknet.net>2004-06-08 03:59:01 +0000
committerRob Funk <rfunk@funknet.net>2004-06-08 03:59:01 +0000
commitd78b61e3efaea197a6e5b2b72bf2981a9ed69461 (patch)
tree1704e13ce5d767d59868a2d5e834cb2e988ed90f /contrib/mold_remover.py
parentd9e84e176fe538e110d9612f9832d69846e8d3e7 (diff)
downloadfetchmail-d78b61e3efaea197a6e5b2b72bf2981a9ed69461.tar.gz
fetchmail-d78b61e3efaea197a6e5b2b72bf2981a9ed69461.tar.bz2
fetchmail-d78b61e3efaea197a6e5b2b72bf2981a9ed69461.zip
Add files from ESR's dev directory that weren't under version control
svn path=/trunk/; revision=3881
Diffstat (limited to 'contrib/mold_remover.py')
-rw-r--r--contrib/mold_remover.py92
1 files changed, 92 insertions, 0 deletions
diff --git a/contrib/mold_remover.py b/contrib/mold_remover.py
new file mode 100644
index 00000000..1ccba7c3
--- /dev/null
+++ b/contrib/mold_remover.py
@@ -0,0 +1,92 @@
+# Mold Remover
+# A short python script to remove old read mail from a pop3 mailserver.
+# Dovetails with fetchmail with keep option.
+# Run it as a cron job...
+# Version 0.1 by James Stone (stone1@btinternet.com)
+# please submit bug reports and code optimisations as you see fit!
+
+import string
+import poplib
+import time
+
+#user editable section
+mailserver=["mail.server1","mail.server2"] #list of mailservers
+login=["login1","login2"] #list of logins for corresponding mailserver
+password=["pass1","pass2"] #list of passwords (note: chmod 700 for this script)
+days=2 #number of days to keep on server.
+localuidlcache="/var/mail/.fetchmail-UIDL-cache" #fetchmail's UIDL cache
+localuidldate="/var/mail/.UIDLDate" #mold remover's UIDL datefile
+#end of user editable section
+
+readfile=open(localuidlcache, 'r')
+datefile=open(localuidldate, 'a+')
+tempfile=open("/tmp/uidltmp", 'w+')
+popuidllist=[] #list of undeleted uidls on all servers
+totnum=0 #number of undeleted messages on all servers
+connectedto=-1
+
+#connect to each mailserver get all the new message UIDLs and delete any
+#expired messages.
+
+for a in range(len(mailserver)):
+ connect=poplib.POP3(mailserver[a])
+ connect.user(login[a])
+ connect.pass_(password[a])
+ connectedto=a
+ number,size=connect.stat()
+ totnum+=number
+ for mesnum in range(number):
+ messagedeleted=0
+ datefile.seek(0)
+ for uidldate in datefile:
+ uidldatesplit=uidldate.split(' ')
+ if(connectedto==int(uidldatesplit[2])):
+ if (time.time()-float(uidldatesplit[1]))>(86400*days):
+ try:
+ recheckuidl=connect.uidl(mesnum+1)
+ recheckuidlsplit=recheckuidl.split(' ')
+ if (recheckuidlsplit[2]==uidldatesplit[0]):
+ print('deleting'+recheckuidlsplit[1])
+ print(connect.dele(recheckuidlsplit[1]))
+ messagedeleted=1
+ totnum-=1
+ except poplib.error_proto:
+ pass #skip over messages that have already been deleted.
+ if not(messagedeleted):
+ popuidllist.append(connect.uidl(mesnum+1)+' '+str(a))
+ connect.quit()
+
+
+#get rid of lines in uidldate file corresponding to the messages that have been
+#expired (and hopefully been deleted)
+
+datefile.seek(0)
+for uidldate in datefile:
+ uidldatesplit=uidldate.split(' ')
+ if not(time.time()-float(uidldatesplit[1]))>(86400*days):
+ tempfile.write(uidldate)
+datefile.close()
+datefile=open(localuidldate,'w+')
+tempfile.seek(0)
+for line in tempfile:
+ datefile.write(line)
+datefile.close()
+datefile=open(localuidldate,'a+')
+
+#add date to uidl for any messages still on the server which have been read
+#(check in readfile) and store in local datefile.
+
+for mesnum in range(totnum):
+ popuidl=popuidllist[mesnum]
+ popuidlsplit=popuidl.split(' ')
+ readfile.seek(0)
+ for localuidl in readfile:
+ if(localuidl.find(popuidlsplit[2])<>-1):
+ foundindatefile=0
+ datefile.seek(0)
+ for stored in datefile:
+ if (stored.find(popuidlsplit[2])<>-1):
+ foundindatefile=1
+ if not(foundindatefile):
+ datefile.write(popuidlsplit[2]+' '+str(time.time())+' '
+ +popuidlsplit[3]+'\n')