- INBOX maps to user/[username]
- internal encoding of . etc. as of cyrus 2.2
'''
-
+import logging
import argparse
from mail_iterator import MailIterator
from file_iterator import FileIterator
+LOG_FILENAME = "restore_mail_inject.log"
+LOG_FILE_LEVEL = logging.DEBUG
+LOG_SHELL_LEVEL = logging.INFO
+
def main():
"""Main function."""
# prepare configuration
args = configure_args()
- print("The module restore_mail_inject.py started with user %s, folder %s and source %s." %
+ prepare_logger()
+ logging.info("The module restore_mail_inject.py started with user %s, folder %s and source %s." %
(args.user, args.folder, args.srcdir))
# connect
- try:
- session = MailIterator(args.user)
- #session = MailIterator("/var/imap/socket/imap", "cyrus", "geheim")
- storage = FileIterator()
- except UserWarning as ex:
- print(ex)
- return
+ session = MailIterator(args.user)
+ #session = MailIterator("/var/imap/socket/imap", "cyrus", "geheim")
+ storage = FileIterator()
# retrieve mailbox list from the mailbox list file
mailbox_list = storage.load_mailbox_list(args.mboxlistfile)
# inject emails
path_generator = storage.load_mails(args.srcdir, args.folder)
for message, mailbox, date_modified in path_generator:
-
+
# mailboxes marked for creating and acl update
# add acls after all subfolders or their acls will be derived from parent folder
- #print(storage.created_mailboxes, storage.acl_mailboxes)
for new_mailbox in storage.created_mailboxes:
session.create_mailbox(new_mailbox)
for acl_mailbox in storage.acl_mailboxes:
session.add_acls(acl_mailbox, mailbox_list, args.ouser, args.user)
storage.created_mailboxes = []
storage.acl_mailboxes = []
-
+
session.inject_message(message, mailbox, date_modified)
-
+
# last iteration mailboxes in case root mailbox has no e-mails for injection
for new_mailbox in storage.created_mailboxes:
session.create_mailbox(new_mailbox)
for acl_mailbox in storage.acl_mailboxes:
session.add_acls(acl_mailbox, mailbox_list, args.ouser, args.user)
-
- print("Finished injecting mails. Exiting.")
+
+ logging.info("Finished injecting mails. Exiting.")
return
def configure_args():
return args
+def prepare_logger():
+ """Sets up the logging functionality"""
+
+ # reset the log
+ with open(LOG_FILENAME, 'w'):
+ pass
+
+ # add basic configuration
+ logging.basicConfig(filename=LOG_FILENAME,
+ format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
+ level=LOG_FILE_LEVEL)
+
+ # add a handler for a console output
+ console = logging.StreamHandler()
+ console.setLevel(LOG_SHELL_LEVEL)
+ formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
+ console.setFormatter(formatter)
+ logging.getLogger('').addHandler(console)
+ return
if __name__ == "__main__":
main()