added imapy.py
This commit is contained in:
88
imapy.py
Executable file
88
imapy.py
Executable 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()
|
||||
Reference in New Issue
Block a user