def saveatth(uname=''): userlist = [[], ] ms.listuser(uname, userlist) for user in userlist[0]: where = {'uname': user['uname'], 'filenames': {'$ne': []}} for doc in ms.mails.find(where): try: log.debug("saveatth: %s ", doc['sourcename']) mail = message(doc['source']) mail.parsebody() filepath = os.path.join(mailboxdir, user['alias'], doc.get('mailbox', 'Inbox'), os.path.splitext( os.path.basename(doc['sourcename']))[0]) if not os.path.exists(filepath): os.makedirs(filepath) for filename in mail.filenames: file = open(os.path.join(filepath, filename), "wb") file.write(mail._files[filename].get_payload(decode=True)) file.close() if doc.get('mailbox') == 'Inbox': save2edo(user['alias'], file.name) except: log.error('saveatth [%s] error: %s', doc['sourcename'], "".join(traceback.format_exception(*sys.exc_info()))) continue
def parsemails(uname=''): userlist = [[], ] ms.listuser(uname, userlist) for user in userlist[0]: where = {'uname': user['uname'], 'subject': {'$exists': False}} for doc in ms.mails.find(where): try: log.debug("parsemails: %s ", doc['sourcename']) mail = message(doc['source']) doc['msgid'] = mail._msg['Message-ID'] doc['from'] = mail.From[0] doc['to'] = mail._msg['Delivered-To'] doc['subject'] = mail.Subject doc['date'] = mail.Date doc['size'] = len(doc['source']) ms.mails.save(doc, safe=True) except: log.error('parsemails [%s] error: %s', doc['sourcename'], "".join(traceback.format_exception(*sys.exc_info()))) continue
def parsebody(uname=''): userlist = [[], ] ms.listuser(uname, userlist) for user in userlist[0]: where = {'uname': user['uname'], 'body': {'$exists': False}} for doc in ms.mails.find(where): try: log.debug("parsebody: %s ", doc['sourcename']) mail = message(doc['source']) mail.parsebody() if isinstance(mail.body, dict): doc['body'] = dict([(k, Binary("".join(v), 128)) for k, v in mail.body.items()]) else: doc['body'] = Binary(mail.body, 128) doc['filenames'] = mail.filenames ms.mails.save(doc, safe=True) except: log.error('parsebody [%s] error: %s', doc['sourcename'], "".join(traceback.format_exception(*sys.exc_info()))) continue