import configparser
from date_interpreter import DateInterpreter
from mail_iterator import MailIterator
+from caching_data import CachingData
def main():
"""Iterates through csv list of users and their mailboxes"""
level=config.getint('basic_settings', 'log_level'))
date_interp = DateInterpreter()
+ cashing_data = CachingData()
+ logging.warning(cashing_data)
user_reader = csv.DictReader(open("userdata.csv", "r"), delimiter=',')
server = config.get('basic_settings', 'imap_server')
continue
for mailbox in session:
try:
- #print(".")
+ #special key to ensure better mailbox uniqueness
+ mailbox_key = mailbox[0].strip('"') + mailbox[1]
mail_ids = session.fetch_messages()
+ new_ids = cashing_data.sync_cached_mailbox(user['username'], mailbox_key, mail_ids)
+ #print(len(new_ids), "new out of", len(mail_ids), "in", mailbox)
except UserWarning as ex:
logging.error(ex)
continue
- for mid in mail_ids:
+ for mid in new_ids:
try:
fetched_internal_date = session.fetch_internal_date(mid)
internal_date = date_interp.extract_internal_date(fetched_internal_date)
received_date = date_interp.extract_received_date(fetched_received_date)
if(received_date==""):
logging.warning("No received date could be found in message uid: %s - mailbox: %s - user: %s.\n",
- mid.decode("utf-8"), mailbox.strip('"'), user['username'])
+ mid.decode("utf-8"), mailbox[0], user['username'])
continue
except UserWarning as ex:
logging.error(ex)
#print(received_date, internal_date)
if(test_mode==0):
try:
- session.update_message(mid, mailbox, received_date)
+ session.update_message(mid, mailbox[0], received_date)
except UserWarning as ex:
logging.error(ex)
continue
else:
logging.info("Date conflict found in message uid: %s - mailbox: %s - user: %s.\nInternal date %s is different from received date %s from RECEIVED header:\n%s.",
- mid.decode("utf-8"), mailbox.strip('"'), user['username'],
+ mid.decode("utf-8"), mailbox[0], user['username'],
internal_date.strftime("%d %b %Y %H:%M:%S"),
received_date.strftime("%d %b %Y %H:%M:%S"),
fetched_received_date[0][1].decode("utf-8").split("Received:")[1])
- #count total emails for every user and mailbox
- mixed_key = user['username']+'|'+mailbox.strip('"')
- total_per_box[mixed_key] = 1 + total_per_box.get(mixed_key, 0)
+ # count total emails for every user and mailbox
+ user_key = user['username']+'|'+mailbox[0].strip('"')
+ total_per_box[user_key] = 1 + total_per_box.get(user_key, 0)
+ # if all messages were successfully fixed confirm caching
+ cashing_data.commit_cached_mailbox(user['username'], mailbox_key)
+ # final report on date conflicts
total_per_user = 0
for warning in total_per_box:
total_per_user += total_per_box[warning]