Use binary files for email. Still some issues to work out with payloads.

This commit is contained in:
Stuart D. Gathman
2016-09-22 21:57:14 -04:00
parent bae79a4f1c
commit 755f3edb2b
5 changed files with 50 additions and 46 deletions
+19 -19
View File
@@ -62,18 +62,18 @@ class MimeTestCase(unittest.TestCase):
self.failUnless(plist[0] == 'name="Jim&Girlz.jpg"')
def testParse(self,fname='samp1'):
msg = mime.message_from_file(open('test/'+fname,"r"))
msg = mime.message_from_file(open('test/'+fname,"rb"))
self.failUnless(msg.ismultipart())
parts = msg.get_payload()
self.failUnless(len(parts) == 2)
txt1 = parts[0].get_payload()
self.failUnless(txt1.rstrip() == samp1_txt1,txt1)
msg = mime.message_from_file(open('test/missingboundary',"r"))
msg = mime.message_from_file(open('test/missingboundary',"rb"))
# should get no exception as long as we don't try to parse
# message attachments
mime.defang(msg,scan_rfc822=False)
msg.dump(open('test/missingboundary.out','w'))
msg = mime.message_from_file(open('test/missingboundary',"r"))
msg.dump(open('test/missingboundary.out','wb'))
msg = mime.message_from_file(open('test/missingboundary',"rb"))
try:
mime.defang(msg)
# python 2.4 doesn't get exceptions on missing boundaries, and
@@ -85,12 +85,12 @@ class MimeTestCase(unittest.TestCase):
def testDefang(self,vname='virus1',part=1,
fname='LOVE-LETTER-FOR-YOU.TXT.vbs'):
msg = mime.message_from_file(open('test/'+vname,"r"))
msg = mime.message_from_file(open('test/'+vname,"rb"))
mime.defang(msg,scan_zip=True)
self.failUnless(msg.ismodified(),"virus not removed")
oname = vname + '.out'
msg.dump(open('test/'+oname,"w"))
msg = mime.message_from_file(open('test/'+oname,"r"))
msg.dump(open('test/'+oname,"wb"))
msg = mime.message_from_file(open('test/'+oname,"rb"))
txt2 = msg.get_payload()
if type(txt2) == list:
txt2 = txt2[part].get_payload()
@@ -110,11 +110,11 @@ class MimeTestCase(unittest.TestCase):
# virus6 has no parts - the virus is directly inline
def testDefang6(self,vname="virus6",fname='FAX20.exe'):
msg = mime.message_from_file(open('test/'+vname,"r"))
msg = mime.message_from_file(open('test/'+vname,"rb"))
mime.defang(msg)
oname = vname + '.out'
msg.dump(open('test/'+oname,"w"))
msg = mime.message_from_file(open('test/'+oname,"r"))
msg.dump(open('test/'+oname,"wb"))
msg = mime.message_from_file(open('test/'+oname,"rb"))
self.failIf(msg.ismultipart())
txt2 = msg.get_payload()
self.failUnless(txt2 == mime.virus_msg % \
@@ -123,11 +123,11 @@ class MimeTestCase(unittest.TestCase):
# honey virus has a sneaky ASP payload which is parsed correctly
# by email package in python-2.2.2, but not by mime.MimeMessage or 2.2.1
def testDefang7(self,vname="honey",fname='story[1].scr'):
msg = mime.message_from_file(open('test/'+vname,"r"))
msg = mime.message_from_file(open('test/'+vname,"rb"))
mime.defang(msg)
oname = vname + '.out'
msg.dump(open('test/'+oname,"w"))
msg = mime.message_from_file(open('test/'+oname,"r"))
msg.dump(open('test/'+oname,"wb"))
msg = mime.message_from_file(open('test/'+oname,"rb"))
parts = msg.get_payload()
txt2 = parts[1].get_payload()
txt3 = parts[2].get_payload()
@@ -138,7 +138,7 @@ class MimeTestCase(unittest.TestCase):
('story[1].asp',hostname,None),txt3)
def testParse2(self,fname="spam7"):
msg = mime.message_from_file(open('test/'+fname,"r"))
msg = mime.message_from_file(open('test/'+fname,"rb"))
self.failUnless(msg.ismultipart())
parts = msg.get_payload()
self.failUnless(len(parts) == 2)
@@ -148,11 +148,11 @@ class MimeTestCase(unittest.TestCase):
def testZip(self,vname="zip1",fname='zip.zip'):
self.testDefang(vname,1,'zip.zip')
# test scan_zip flag
msg = mime.message_from_file(open('test/'+vname,"r"))
msg = mime.message_from_file(open('test/'+vname,"rb"))
mime.defang(msg,scan_zip=False)
self.failIf(msg.ismodified())
# test ignoring empty zip (often found in DSNs)
msg = mime.message_from_file(open('test/zip2','r'))
msg = mime.message_from_file(open('test/zip2','rb'))
mime.defang(msg,scan_zip=True)
self.failIf(msg.ismodified())
# test corrupt zip (often an EXE named as a ZIP)
@@ -177,10 +177,10 @@ class MimeTestCase(unittest.TestCase):
def testCheckAttach(self,fname="test1"):
# test1 contains a very long filename
msg = mime.message_from_file(open('test/'+fname,'r'))
msg = mime.message_from_file(open('test/'+fname,'rb'))
mime.defang(msg,scan_zip=True)
self.failIf(msg.ismodified())
msg = mime.message_from_file(open('test/test2','r'))
msg = mime.message_from_file(open('test/test2','rb'))
rc = mime.check_attachments(msg,self._chk_attach)
self.assertEquals(self.filename,"7501'S FOR TWO GOLDEN SOURCES SHIPMENTS FOR TAX & DUTY PURPOSES ONLY.PDF")
self.assertEquals(rc,Milter.CONTINUE)
@@ -205,7 +205,7 @@ if __name__ == '__main__':
unittest.main()
else:
for fname in sys.argv[1:]:
fp = open(fname,'r')
fp = open(fname,'rb')
msg = mime.message_from_file(fp)
mime.defang(msg,scan_zip=True)
print(msg.as_string())