forked from archive/andrewferrier_email2pdf
Handle PDFs as application/octet-streams.
This commit is contained in:
parent
ea0adea08c
commit
76bc8790f0
2 changed files with 33 additions and 9 deletions
20
email2pdf
20
email2pdf
|
@ -86,21 +86,29 @@ def main():
|
|||
|
||||
def handle_pdf_parts(email, output_directory):
|
||||
parts = find_all_parts(email, "application/pdf")
|
||||
maybeParts = find_all_parts(email, "application/octet-stream")
|
||||
|
||||
for maybePart in maybeParts:
|
||||
filename = extract_part_filename(maybePart)
|
||||
unused_base, ext = os.path.splitext(filename)
|
||||
if ext.lower() == '.pdf':
|
||||
parts.append(maybePart)
|
||||
|
||||
for part in parts:
|
||||
payload = part.get_payload(decode=True)
|
||||
|
||||
filename = part.get_filename()
|
||||
if decode_header(filename)[0][1] is not None:
|
||||
filename = str(decode_header(filename)[0][0]).decode(decode_header(filename)[0][1])
|
||||
filename = extract_part_filename(part)
|
||||
|
||||
fullFilename = os.path.join(output_directory, filename)
|
||||
|
||||
fullFilename = get_unique_version(fullFilename)
|
||||
|
||||
payload = part.get_payload(decode=True)
|
||||
with open(fullFilename, 'wb') as output_file:
|
||||
output_file.write(payload)
|
||||
|
||||
def extract_part_filename(part):
|
||||
filename = part.get_filename()
|
||||
if decode_header(filename)[0][1] is not None:
|
||||
filename = str(decode_header(filename)[0][0]).decode(decode_header(filename)[0][1])
|
||||
return filename
|
||||
|
||||
def get_unique_version(filename):
|
||||
# From here: http://stackoverflow.com/q/183480/27641
|
||||
|
|
|
@ -76,15 +76,15 @@ class BaseTestClasses:
|
|||
def attachText(self, content):
|
||||
self.msg.attach(MIMEText(content, 'plain'))
|
||||
|
||||
def attachPDF(self, string):
|
||||
unused_f_handle, file_name = tempfile.mkstemp(prefix="email2pdf_unittest_file", suffix=".pdf")
|
||||
def attachPDF(self, string, fileSuffix="pdf", mainContentType="application", subContentType="pdf"):
|
||||
unused_f_handle, file_name = tempfile.mkstemp(prefix="email2pdf_unittest_file", suffix="." + fileSuffix)
|
||||
|
||||
try:
|
||||
cv = canvas.Canvas(file_name)
|
||||
cv.drawString(0, 500, string)
|
||||
cv.save()
|
||||
|
||||
part = MIMEBase('application', "pdf")
|
||||
part = MIMEBase(mainContentType, subContentType)
|
||||
openHandle = open(file_name, "rb")
|
||||
part.set_payload(openHandle.read())
|
||||
encoders.encode_base64(part)
|
||||
|
@ -162,7 +162,9 @@ class TestMIME(BaseTestClasses.Email2PDFTestCase):
|
|||
def test_plain(self):
|
||||
self.addHeaders("From", "To", "Subject")
|
||||
self.attachText("Some basic textual content")
|
||||
filename = self.attachPDF("Some PDF content", mainContentType="application", subContentType="octet-stream")
|
||||
self.assertEqual(self.invokeEmail2PDF(), 0)
|
||||
self.assertTrue(os.path.exists(filename))
|
||||
|
||||
def test_html(self):
|
||||
self.addHeaders("From", "To", "Subject")
|
||||
|
@ -182,6 +184,20 @@ class TestMIME(BaseTestClasses.Email2PDFTestCase):
|
|||
self.assertEqual(self.invokeEmail2PDF(), 0)
|
||||
self.assertTrue(os.path.exists(filename))
|
||||
|
||||
def test_pdfAsOctetStream(self):
|
||||
self.addHeaders("From", "To", "Subject")
|
||||
self.attachText("Some basic textual content")
|
||||
filename = self.attachPDF("Some PDF content", mainContentType="application", subContentType="octet-stream")
|
||||
self.assertEqual(self.invokeEmail2PDF(), 0)
|
||||
self.assertTrue(os.path.exists(filename))
|
||||
|
||||
def test_somethingElseAsOctetStream(self):
|
||||
self.addHeaders("From", "To", "Subject")
|
||||
self.attachText("Some basic textual content")
|
||||
filename = self.attachPDF("Some PDF content", fileSuffix="xyz", mainContentType="application", subContentType="octet-stream")
|
||||
self.assertEqual(self.invokeEmail2PDF(), 0)
|
||||
self.assertFalse(os.path.exists(filename))
|
||||
|
||||
def test_2pdfs(self):
|
||||
self.addHeaders("From", "To", "Subject")
|
||||
self.attachText("Some basic textual content")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue