|
@@ -1,5 +1,7 @@
|
|
from imap_tools import MailBox, AND
|
|
from imap_tools import MailBox, AND
|
|
import re
|
|
import re
|
|
|
|
+from datetime import datetime, date
|
|
|
|
+
|
|
|
|
|
|
whitelist = {
|
|
whitelist = {
|
|
'@auto-greiner.de': [
|
|
'@auto-greiner.de': [
|
|
@@ -10,42 +12,74 @@ whitelist = {
|
|
],
|
|
],
|
|
'@mvcmotors.at': [
|
|
'@mvcmotors.at': [
|
|
'@mvcautomotive.com'
|
|
'@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__':
|
|
if __name__ == '__main__':
|
|
- main()
|
|
|
|
|
|
+ move_mails()
|
|
|
|
+ cleanup_folder()
|