瀏覽代碼

Mailserver aufräumen

robert 2 年之前
父節點
當前提交
36ecc9abfb
共有 1 個文件被更改,包括 66 次插入32 次删除
  1. 66 32
      mailserver/imap.py

+ 66 - 32
mailserver/imap.py

@@ -1,5 +1,7 @@
 from imap_tools import MailBox, AND
 import re
+from datetime import datetime, date
+
 
 whitelist = {
     '@auto-greiner.de': [
@@ -10,42 +12,74 @@ whitelist = {
     ],
     '@mvcmotors.at': [
         '@mvcautomotive.com'
+    ],
+    '@opel-thomas.de': [
+        'info@auto-steinhaeusser.de',
+        'info@opel-weber.com',
+        'auto-wabner@t-online.de'
+    ],
+    '@autohaus-rueschkamp.de': [
+        'j.rueschkamp@gmail.com'
+    ],
+    '@hedtke.de': [
+        'holger.hedtke@heicosportiv.de'
     ]
 }
 
 
-def main():
-    mb = MailBox('mail.global-cube.com').login('archiv', 'Gc01am64!')
-    messages = mb.fetch(criteria=AND(from_="@global-cube.com"), mark_seen=True, bulk=True)
-    # print(mb.folder.list())
-    # for folder in mb.folder.list():
-    #     if '|' in folder.name:
-    #         print(folder)
-    #         new_name = folder.name.replace('|', '.')   # .replace('@', '').replace('.', '_')
-    #         mb.folder.rename(folder.name, new_name)
-
-    for msg in messages:
-        match = re.findall(r'\+(.*)@', msg.from_)
-        if not match:
-            print(msg.from_, msg.to, msg.subject)
-        else:
-            domain = '@' + match[0]
-
-            subfolder = 'Archive.' + domain.replace('@', '').replace('.', '_')
-            if not mb.folder.exists(subfolder):
-                mb.folder.create(subfolder)
-            mb.move(msg.uid, subfolder)
-
-            for to in msg.to:
-                if domain not in to and '@global-cube.de' not in to and msg.from_ != to:
-                    if domain in whitelist:
-                        valid_domain = [entry in to for entry in whitelist[domain]]
-                        if any(valid_domain):
-                            break
-                    print(domain, to, msg.subject)
-            # print(msg.text)
-            # print([att.filename for att in msg.attachments if att.filename.endswith('.pdf')])
+def cleanup_folder():
+    date_now = datetime.now()
+    date_criteria = date(date_now.year, date_now.month - 1, 1)
+    msg_limit = 100
+
+    with MailBox('mail.global-cube.com').login('archiv', 'Gc01am64!') as mb:
+        folder_list = [f.name for f in mb.folder.list() if 'Archive.' in f.name]
+
+        for folder in folder_list:
+            msg_count = mb.folder.status(folder)['MESSAGES']
+            if msg_count < msg_limit:
+                continue
+            mb.folder.set(folder)
+            messages = mb.fetch(criteria=AND(date_lt=date_criteria), mark_seen=True, headers_only=True)
+            uids = [msg.uid for msg in messages]
+            mb.delete(uids[0:(msg_count - msg_limit)])
+
+
+def move_mails():
+    with MailBox('mail.global-cube.com').login('archiv', 'Gc01am64!') as mb:
+        messages = mb.fetch(criteria=AND(from_="@global-cube.com"), mark_seen=True, bulk=True, limit=1000, headers_only=True)
+
+        for msg in messages:
+            match = re.findall(r'\+(.*)@', msg.from_)
+            if not match:
+                print(msg.from_, msg.to, msg.subject)
+            else:
+                domain = '@' + match[0]
+
+                subfolder = 'Archive.' + domain.replace('@', '').replace('.', '_')
+                if not mb.folder.exists(subfolder):
+                    mb.folder.create(subfolder)
+
+                if is_valid_message(msg, domain):
+                    mb.move(msg.uid, subfolder)
+                else:
+                    print(domain, ', '.join(msg.to), msg.subject)
+                # print(msg.text)
+                # print([att.filename for att in msg.attachments if att.filename.endswith('.pdf')])
+
+
+def is_valid_message(msg, domain):
+    for to in msg.to:
+        if domain in to or '@global-cube.de' in to or msg.from_ == to:
+            continue
+        if domain not in whitelist:
+            return False
+        valid_domain = [entry in to for entry in whitelist[domain]]
+        if not any(valid_domain):
+            return False
+    return True
 
 
 if __name__ == '__main__':
-    main()
+    move_mails()
+    cleanup_folder()