mailboxes = None
# logged in status
logged_in = None
+ # skip shared folders
+ skip_shared_folders = None
- def __init__(self, server, username, password):
+ def __init__(self, server, username, password, skip_shared_folders = False):
"""Creates a connection and a user session."""
try:
self.mail_con = imaplib.IMAP4_SSL(server)
self.logged_in = False
raise UserWarning("Could not log in as user " + username + ".")
self.logged_in = True
-
try:
result, self.mailboxes = self.mail_con.list()
except:
raise UserWarning("Could not retrieve mailboxes for user " + username + ".")
+ self.skip_shared_folders = skip_shared_folders
def __del__(self):
"""Closes the connection and the user session."""
for mailbox in self.mailboxes:
logging.debug("Checking mailbox %s.", mailbox)
mailbox = MAILBOX_RESP.match(mailbox.decode('iso-8859-1')).groups()
+ # detect if mailbox is shared and if skip flag is set iterate further
+ if(self.skip_shared_folders and mailbox[2].split(mailbox[1])[0] == '"user'):
+ logging.info("Mailbox %s is shared and therefore skipped.", mailbox[2])
+ continue
+ # retrieve uidvalidity
try:
result, data = self.mail_con.status(mailbox[2], '(UIDVALIDITY)')
except:
raise UserWarning("Could not retrieve mailbox uidvalidity.")
uidval = UIDVAL_RESP.match(data[0].decode('iso-8859-1')).groups()
logging.debug("Extracted mailbox info is %s %s.", data[0], uidval)
- self.mail_con.select(mailbox[2])
+ # select mailbox if writable
+ try:
+ self.mail_con.select(mailbox[2])
+ except self.mail_con.readonly:
+ logging.warning("Mailbox %s is not writable and therefore skipped.", mailbox[2])
+ continue
yield (mailbox[2], uidval[1])
def fetch_messages(self):