diff options
author | Matěj Cepl <mcepl@cepl.eu> | 2018-04-18 22:50:13 +0200 |
---|---|---|
committer | Matěj Cepl <mcepl@cepl.eu> | 2018-04-18 22:50:13 +0200 |
commit | 49e281c01b2966609b713fb4a2deda94666fed40 (patch) | |
tree | c63b47f06314b467fc98a2b7df1f80ba71a979a0 /purgeObsolete.py | |
parent | 532b4cc2226335d049d1345557b9038d961407e7 (diff) | |
download | imapArch-49e281c01b2966609b713fb4a2deda94666fed40.tar.gz |
Reorganize files again
Diffstat (limited to 'purgeObsolete.py')
-rw-r--r-- | purgeObsolete.py | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/purgeObsolete.py b/purgeObsolete.py new file mode 100644 index 0000000..4491eec --- /dev/null +++ b/purgeObsolete.py @@ -0,0 +1,151 @@ +# -*- coding: utf-8 -*- +# note http://docs.python.org/lib/module-doctest.html +# resp. file:///usr/share/doc/python-docs-*/html/lib/module-doctest.html +# for testing +from __future__ import division +from java.util import Properties, Date, GregorianCalendar, Locale +from java.text import SimpleDateFormat +from java.lang import System +from javax.mail import * +from javax.mail.search import * +from com.sun.mail.imap import IMAPFolder, IMAPSSLStore +from jarray import array +import sys, os +from datetime import date +import ConfigParser + +debug=False + +class SimpleDate(GregorianCalendar): + def __init__(self): + pass + + def getDate(): + return self.getTime() + + def decrease(self,howMuch,unit="m"): + pass + + def getMessageDate(msg): + """ + Return the date of the message + + @param msg analyzed message + @return GregorianCalendar of the messages date + @throws MessagingException + """ + dateMS = msg.getReceivedDate().getTime()//1000 + dateStruct = date.fromtimestamp(dateMS) + return dateStruct + +class ArchivedFolder(object): + def __init__(self,store,name): + self.folder = store.store.getDefaultFolder().getFolder(name) + self.folder.open(Folder.READ_WRITE) + + def purgeOld(self,dateLimit): + toBeDeleted = [] + for msg in self.folder.getMessages(): + flags = msg.getFlags() + if (__getMessageDate(msg) < dateLimit) and (flags.contains(Flags.Flag.SEEN)): + toBeDeleted.append(msg) + self.folder.setFlags(toBeDeleted,Flags.Flag.DELETED, true) + self.folder.expunge() + +class ArchivedStore(object): + """ + >>> myStore = ArchivedStore(paramServer="zimbra") + >>> folderList = myStore.store.getDefaultFolder().list("*") + >>> len(folderList)>0 + 1 + >>> myStore.store.close() + + and + >>> myStore = ArchivedStore(paramServer="zimbra") + >>> folder = ArchivedFolder(myStore,"INBOX/bugzilla/xgl") + >>> folder.folder.getMessageCount() > 0 + 1 + >>> myStore.store.close() + + """ + def __init__(self,paramServer="localhost",paramUser="",paramPassword="",maxageMonth=3): + self.props = System.getProperties() + self.session = Session.getInstance(self.props,None) + self.props.setProperty("javax.net.ssl.keyStore", "/home/matej/.keystore") + self.props.setProperty("javax.net.ssl.trustStore", "/home/matej/.keystore") + if debug: + self.session.setDebug(True) + try: + self.store = self.session.getStore("imaps") + except: + print >> sys.stderr, "Cannot get Store" + raise + + conffile = os.path.expanduser("~/.bugzillarc") + if paramServer: + config = ConfigParser.ConfigParser() + config.read([conffile]) + user,host,port,password = self.props.getProperty("user.name"),\ + "localhost",993,"" + + if config: + if config.has_section(paramServer): + if config.has_option(paramServer, "name"): + user = config.get(paramServer, "name") + if config.has_option(paramServer, "host"): + host = config.get(paramServer, "host") + if config.has_option(paramServer, "port"): + port = config.get(paramServer, "port") + if config.has_option(paramServer, "password"): + password = config.get(paramServer, "password") + + if paramUser: + user=paramUser + if paramPassword: + password=paramPassword + + if debug: + print >>sys.stderr,"host = %s, user = %s, password = %s" % \ + (host,user,password) + + self.__login(host,user,password) + + def __login(self,server,user,password): + try: + self.store.connect(server,user,password) + except: + print >> sys.stderr, "Cannot connect to %s as %s with password %s" %\ + (server,user,password) + raise + +def main(): + """ + >>> threeMonthAgo = date.today() + >>> JD3MAgo = GregorianCalendar(threeMonthAgo.year, + threeMonthAgo.month-1, + threeMonthAgo.day,0,0) + >>> formatter = SimpleDateFormat("yyyy-MM-dd",Locale.US); + >>> JD3MAgoStr = formatter.format(JD3MAgo.getTime()) + >>> str(threeMonthAgo)==JD3MAgoStr + 1 + """ + threeMonthAgo = date.today() + newmonth = threeMonthAgo.month-3 + threeMonthAgo = threeMonthAgo.replace(month=newmonth) + JD3MAgo = GregorianCalendar(threeMonthAgo.year, + threeMonthAgo.month-1, + threeMonthAgo.day,0,0).getTime() + + myStore = ArchivedStore(paramServer="zimbra") + folder = ArchivedFolder(myStore,"INBOX/bugzilla/xgl") + + unreadTerm = FlagTerm(Flags(Flags.Flag.SEEN),True) + dateTerm = ReceivedDateTerm(ComparisonTerm.LT,JD3MAgo) + searchTerm = AndTerm(unreadTerm,dateTerm) + msgsFound = folder.folder.search(searchTerm) + + print len(msgsFound) + myStore.store.close() + +if __name__=='__main__': + main() |