# -*- 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()