Bläddra i källkod

Blacklist ergänzen

robert 2 år sedan
förälder
incheckning
3989654143
2 ändrade filer med 57 tillägg och 14 borttagningar
  1. 1 0
      mailserver/blacklist.json
  2. 56 14
      mailserver/imap.py

+ 1 - 0
mailserver/blacklist.json

@@ -0,0 +1 @@
+["Testnachricht", "Abwesen", "Automatische Antwort", "Urlaub", "außer Haus", "nicht im Hause"]

+ 56 - 14
mailserver/imap.py

@@ -7,11 +7,15 @@ from datetime import datetime, date
 
 
 class Imap:
-    commands = ['cleanup', 'move']
+    commands = ['cleanup', 'move', 'remove', 'add_to_whitelist']
     whitelist = {}
+    blacklist = []
 
     def __init__(self):
-        self.whitelist = json.load(open(os.path.dirname(__file__) + '/whitelist.json', 'r'))
+        with open(os.path.dirname(__file__) + '/whitelist.json', 'r') as frh:
+            self.whitelist = json.load(frh)
+        with open(os.path.dirname(__file__) + '/blacklist.json', 'r') as frh:
+            self.blacklist = json.load(frh)
 
     def cleanup(self):
         date_now = datetime.now()
@@ -37,20 +41,21 @@ class Imap:
             for msg in messages:
                 match = re.findall(r'\+(.*)@', msg.from_)
                 if not match:
-                    print(msg.from_, msg.to, msg.subject)
-                else:
-                    domain = '@' + match[0]
+                    # print(msg.from_, msg.to, msg.subject)
+                    continue
 
-                    subfolder = 'Archive.' + domain.replace('@', '').replace('.', '_')
-                    if not mb.folder.exists(subfolder):
-                        mb.folder.create(subfolder)
+                domain = '@' + match[0]
 
-                    if self.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')])
+                subfolder = 'Archive.' + domain.replace('@', '').replace('.', '_')
+                if not mb.folder.exists(subfolder):
+                    mb.folder.create(subfolder)
+
+                if self.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(self, msg, domain):
         for to in msg.to:
@@ -63,6 +68,43 @@ class Imap:
                 return False
         return True
 
+    def add_to_whitelist(self):
+        with MailBox('mail.global-cube.com').login('archiv', 'Gc01am64!') as mb:
+            mb.folder.set('whitelist')
+            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)
+                    continue
+
+                domain = '@' + match[0]
+                if not self.is_valid_message(msg, domain):
+                    if domain not in self.whitelist:
+                        self.whitelist[domain] = []
+                    for to in msg.to:
+                        if domain not in to and to not in self.whitelist[domain]:
+                            self.whitelist[domain].append(to)
+            with open(os.path.dirname(__file__) + '/whitelist.json', 'w') as fwh:
+                json.dump(self.whitelist, fwh, indent=2)
+            uids = [msg.uid for msg in messages]
+            mb.delete(uids)
+
+    def remove_absence_messages(self):
+        with MailBox('mail.global-cube.com').login('versand', 'y6!avXX3tQvr') as mb:
+            messages = mb.fetch(criteria=AND(to="@global-cube.com"), mark_seen=True, bulk=True, limit=1000, headers_only=True)
+            selected = []
+            for msg in messages:
+                for b in self.blacklist:
+                    if b in msg.subject:
+                        selected.append(msg.uid)
+            mb.delete(selected)
+
+    def remove(self):
+        self.remove_absence_messages()
+
 
 if __name__ == '__main__':
     plac.Interpreter.call(Imap)
+    # Imap().remove_absence_messages()