|
@@ -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()
|