MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
'''
-import logging
+import logging, re
import argparse, getpass
from mail_iterator import MailIterator
from warnings_handler import WarningsHandler
logging.info("Marking messages as seen for user \"%s\" in folder \"%s\"", args.user, args.folder)
psw = getpass.getpass()
- # prepare simple mail iterator and iterate through mailboxes
- session = MailIterator(args.server, args.user, psw)
+ # prepare simple mail iterator and iterate throug mailboxes
+ session = MailIterator(args.server, args.user, psw, args.skip_shared_folders)
total_messages = 0
for mailbox in session:
- if args.folder != "all folders" and ("INBOX/" + args.folder) not in mailbox[2]:
+ delimiter = mailbox[1]
+ pattern = '^\"?INBOX' + delimiter + args.folder + "[\"?$|" + delimiter + "]"
+ if args.folder != "all folders" and re.compile(pattern).match(mailbox[2]) == None:
continue
try:
mail_ids = session.fetch_messages()
except UserWarning as ex:
logging.error(ex)
- logging.info("Finished marking %s messages as seen", total_messages)
+ logging.info("Finished marking up to %s messages as seen", total_messages)
logging.info("Exiting with code %s", warnings_handler.detected_problems)
return int(warnings_handler.detected_problems > 0)
default="all folders", help='only mark given folder as seen')
parser.add_argument('-s', '--server', dest='server', action='store',
default="localhost", help='imap server name with default localhost')
+ parser.add_argument('-r', '--shared', dest='skip_shared_folders', action='store_false',
+ default=True, help='skip shared folders flag')
args = parser.parse_args()
return args
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."""
+ self.skip_shared_folders = skip_shared_folders
+
# connect to server
try:
self.mail_con = imaplib.IMAP4_SSL(server)
for mailbox in self.mailboxes:
logging.debug("Checking mailbox %s", mailbox[2])
+ # 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
# select mailbox if writable
try:
self.mail_con.select(mailbox[2])
# Work around unsolicited server responses in imaplib by clearing them
self.mail_con.response('STORE')
_result, data = self.mail_con.uid('STORE', mid_range, '+FLAGS', "(\Seen)")
- logging.info("New flags for messages %s are %s", mid_range, data)
+ logging.debug("New flags for messages %s are %s", mid_range, data)
except (self.mail_con.error) as ex:
raise UserWarning("Could not set the flags for some messages: %s", ex)
self.mail_con.expunge()