added imapy.py

This commit is contained in:
tabledevil
2020-01-25 23:00:29 +01:00
parent a6dfa25441
commit c5ec6abbf6

88
imapy.py Executable file
View File

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