imap.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. from imap_tools import MailBox, AND
  2. import re
  3. from datetime import datetime, date
  4. whitelist = {
  5. '@auto-greiner.de': [
  6. '@opel-greiner.de'
  7. ],
  8. '@autohaus-berkemeier.de': [
  9. '@auto-berkemeier.de'
  10. ],
  11. '@mvcmotors.at': [
  12. '@mvcautomotive.com'
  13. ],
  14. '@opel-thomas.de': [
  15. 'info@auto-steinhaeusser.de',
  16. 'info@opel-weber.com',
  17. 'auto-wabner@t-online.de'
  18. ],
  19. '@autohaus-rueschkamp.de': [
  20. 'j.rueschkamp@gmail.com'
  21. ],
  22. '@hedtke.de': [
  23. 'holger.hedtke@heicosportiv.de'
  24. ]
  25. }
  26. def cleanup_folder():
  27. date_now = datetime.now()
  28. date_criteria = date(date_now.year, date_now.month - 1, 1)
  29. msg_limit = 100
  30. with MailBox('mail.global-cube.com').login('archiv', 'Gc01am64!') as mb:
  31. folder_list = [f.name for f in mb.folder.list() if 'Archive.' in f.name]
  32. for folder in folder_list:
  33. msg_count = mb.folder.status(folder)['MESSAGES']
  34. if msg_count < msg_limit:
  35. continue
  36. mb.folder.set(folder)
  37. messages = mb.fetch(criteria=AND(date_lt=date_criteria), mark_seen=True, headers_only=True)
  38. uids = [msg.uid for msg in messages]
  39. mb.delete(uids[0:(msg_count - msg_limit)])
  40. def move_mails():
  41. with MailBox('mail.global-cube.com').login('archiv', 'Gc01am64!') as mb:
  42. messages = mb.fetch(criteria=AND(from_="@global-cube.com"), mark_seen=True, bulk=True, limit=1000, headers_only=True)
  43. for msg in messages:
  44. match = re.findall(r'\+(.*)@', msg.from_)
  45. if not match:
  46. print(msg.from_, msg.to, msg.subject)
  47. else:
  48. domain = '@' + match[0]
  49. subfolder = 'Archive.' + domain.replace('@', '').replace('.', '_')
  50. if not mb.folder.exists(subfolder):
  51. mb.folder.create(subfolder)
  52. if is_valid_message(msg, domain):
  53. mb.move(msg.uid, subfolder)
  54. else:
  55. print(domain, ', '.join(msg.to), msg.subject)
  56. # print(msg.text)
  57. # print([att.filename for att in msg.attachments if att.filename.endswith('.pdf')])
  58. def is_valid_message(msg, domain):
  59. for to in msg.to:
  60. if domain in to or '@global-cube.de' in to or msg.from_ == to:
  61. continue
  62. if domain not in whitelist:
  63. return False
  64. valid_domain = [entry in to for entry in whitelist[domain]]
  65. if not any(valid_domain):
  66. return False
  67. return True
  68. if __name__ == '__main__':
  69. move_mails()
  70. cleanup_folder()