imap.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. from imap_tools import MailBox, AND
  2. import re
  3. import json
  4. import os
  5. from datetime import datetime, date
  6. whitelist = {}
  7. def cleanup_folder():
  8. date_now = datetime.now()
  9. date_criteria = date(date_now.year, date_now.month - 1, 1)
  10. msg_limit = 100
  11. with MailBox('mail.global-cube.com').login('archiv', 'Gc01am64!') as mb:
  12. folder_list = [f.name for f in mb.folder.list() if 'Archive.' in f.name]
  13. for folder in folder_list:
  14. msg_count = mb.folder.status(folder)['MESSAGES']
  15. if msg_count < msg_limit:
  16. continue
  17. mb.folder.set(folder)
  18. messages = mb.fetch(criteria=AND(date_lt=date_criteria), mark_seen=True, headers_only=True)
  19. uids = [msg.uid for msg in messages]
  20. mb.delete(uids[0:(msg_count - msg_limit)])
  21. def move_mails():
  22. with MailBox('mail.global-cube.com').login('archiv', 'Gc01am64!') as mb:
  23. messages = mb.fetch(criteria=AND(from_="@global-cube.com"), mark_seen=True, bulk=True, limit=1000, headers_only=True)
  24. for msg in messages:
  25. match = re.findall(r'\+(.*)@', msg.from_)
  26. if not match:
  27. print(msg.from_, msg.to, msg.subject)
  28. else:
  29. domain = '@' + match[0]
  30. subfolder = 'Archive.' + domain.replace('@', '').replace('.', '_')
  31. if not mb.folder.exists(subfolder):
  32. mb.folder.create(subfolder)
  33. if is_valid_message(msg, domain):
  34. mb.move(msg.uid, subfolder)
  35. else:
  36. print(domain, ', '.join(msg.to), msg.subject)
  37. # print(msg.text)
  38. # print([att.filename for att in msg.attachments if att.filename.endswith('.pdf')])
  39. def is_valid_message(msg, domain):
  40. for to in msg.to:
  41. if domain in to or '@global-cube.de' in to or msg.from_ == to:
  42. continue
  43. if domain not in whitelist:
  44. return False
  45. valid_domain = [entry in to for entry in whitelist[domain]]
  46. if not any(valid_domain):
  47. return False
  48. return True
  49. if __name__ == '__main__':
  50. whitelist = json.load(open(os.path.dirname(__file__) + '/whitelist.json', 'r'))
  51. move_mails()
  52. cleanup_folder()