import os
import sys
import mailparser
import hashlib
import traceback
import base64
from mailparser.mailparser import MailParser
def write_sample(binary, payload, path, filename):
if not os.path.exists(path):
os.makedirs(path)
sample = os.path.join(path, filename)
if binary:
with open(sample, "wb") as f:
f.write(base64.b64decode(payload))
else:
with open(sample, "w") as f:
f.write(payload)
def write_attachments(attachments, base_path):
for a in attachments:
realdir=os.path.dirname(os.path.join(base_path,a["filename"]))
os.makedirs(realdir,exist_ok=True)
write_sample(
binary=a["binary"],
payload=a["payload"],
path=base_path,
filename=a["filename"],
)
for directory, dirnames, filenames in os.walk("."):
for f in filenames:
filename=os.path.join(directory,f)
print("Handling {}".format(filename))
try:
with open(filename,"r",encoding="latin-1") as infile:
data=infile.read()
h=hashlib.sha256(data.encode('utf-16')).hexdigest()
outpath="../{}/".format(h)
os.makedirs(outpath,exist_ok=True)
mail = mailparser.parse_from_string(data)
with open("mail.txt","w",encoding="utf-8") as outfile:
outfile.write("filename:{}\n".format(f)))
outfile.write("\n".join(mail.text_plain))
write_attachments(mail.attachments,outpath)
except Exception as e:
print(e)
print(traceback.format_exc())
Comments