diff --git a/imapy.py b/imapy.py new file mode 100755 index 0000000..51c70f1 --- /dev/null +++ b/imapy.py @@ -0,0 +1,88 @@ +import imaplib, email +from pprint import pprint as pp +from email.header import decode_header +import re +import os +from configparser import ConfigParser +config_file_path=os.path.join(os.path.expanduser('~'),"imap_virus_marvin.ini") + +def get_config(): + if not os.path.isfile(config_file_path): + #write default config and exit + config_instance = ConfigParser() + config_instance["CREDENTIALS"] = { + "username": "virus-user", + "password": "whambamBW" + } + + config_instance["SERVER"] = { + "host": "mail.server.dom", + "port": 993, + "mailbox": "INBOX" + } + with open(config_file_path, 'w') as conf: + config_instance.write(conf) + print("No Config found!") + print("Example Config written to {}".format(config_file_path)) + print("Please Edit and Repeat") + exit(1) + else: + config_instance = ConfigParser() + config_instance.read(config_file_path) + if config_instance["CREDENTIALS"]["password"]=="whambamBW": + print("Looks like you haven't changed the default config") + print("Example Config written to {}".format(config_file_path)) + print("Please Edit and Repeat") + exit(1) + else: + return config_instance + +def force_decode(string, codecs=['utf8', 'cp1252']): + for i in codecs: + try: + return string.decode(i) + except UnicodeDecodeError: + pass + raise Exception("Could not decode") + +def decode(data): + if isinstance(data,bytes): + data=force_decode(data) + tmp=decode_header(data) + res="" + for part in tmp: + if part[1]==None: + if isinstance(part[0],str): + res+= part[0] + else: + try: + res+= part[0].decode('ascii') + except: + print(part[0]) + else: + res+= part[0].decode(part[1]) + return "".join(res.split()) + +def get_subject(num,imap): + res, data = imap.fetch(num,'BODY.PEEK[HEADER.FIELDS (SUBJECT)]') + x,y = data[0] + y=force_decode(y) + y=y[9:] + return decode(y) + +def main(): + config=get_config() + im=imaplib.IMAP4_SSL(config["SERVER"]["host"],config["SERVER"]["port"]) + # im=imaplib.IMAP4_SSL(imap_url,imap_port) + im.login(config["CREDENTIALS"]["username"],config["CREDENTIALS"]["password"]) + im.select(config["SERVER"]["mailbox"]) + + + typ, nums = im.search(None, 'ALL') + for n in nums[0].split(): + print(get_subject(n, im)) + + im.close() + im.logout() + +main()