1
0
Fork 1
mirror of https://github.com/andrewferrier/email2pdf.git synced 2025-03-18 05:52:59 +00:00

PDF files with original filename - closes , closes

Also test PDF attachments.
This commit is contained in:
Andrew Ferrier 2014-10-04 14:51:50 +01:00
parent 58e9c76a41
commit 2f8e27f755
2 changed files with 54 additions and 2 deletions

View file

@ -2,6 +2,7 @@
from datetime import datetime
from subprocess import Popen, PIPE
from email.header import decode_header
import argparse
import email
import os
@ -83,10 +84,29 @@ def main():
output = p.communicate(input=payload)
else:
payload = part.get_payload(decode=True)
with open(output_file_name, 'wb') as output_file:
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])
fullFilename = os.path.join(output_directory, filename)
fullFilename = get_unique_version(fullFilename)
with open(fullFilename, 'wb') as output_file:
output_file.write(payload)
def get_unique_version(filename):
# From here: http://stackoverflow.com/q/183480/27641
counter = 1
file_name_parts = os.path.splitext(filename)
while os.path.isfile(filename):
filename = file_name_parts[0] + '_' + str(counter) + file_name_parts[1]
counter += 1
return filename
def find_depth_first(message, content_type):
if message.is_multipart():
for part in message.get_payload():

View file

@ -3,8 +3,11 @@
from email.message import Message
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
from email.utils import formatdate
from subprocess import Popen, PIPE, DEVNULL
from reportlab.pdfgen import canvas
import os
import sys
@ -64,6 +67,27 @@ def attachText(message, content):
message.attach(MIMEText(content, 'plain'))
def attachPDF(message, string):
unused_f_handle, file_name = tempfile.mkstemp(prefix="email2pdf_unittest_file", suffix=".pdf")
try:
cv = canvas.Canvas(file_name)
cv.drawString(0, 500, string)
cv.save()
part = MIMEBase('application', "pdf")
openHandle = open(file_name, "rb")
part.set_payload(openHandle.read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(file_name))
message.attach(part)
openHandle.close()
return file_name
finally:
os.unlink(file_name)
class TestBasic(unittest.TestCase):
def setUp(self):
self.msg = Message()
@ -96,7 +120,7 @@ class TestBasic(unittest.TestCase):
def test_plaincontent_fileexist(self):
setPlainContent(self.msg, "Hello!")
f_handle, f_path = tempfile.mkstemp()
unused_f_handle, f_path = tempfile.mkstemp()
try:
self.assertNotEqual(invokeEmail2PDF(self.msg, outputFile=f_path, errorExpected=True), 0)
finally:
@ -134,6 +158,14 @@ class TestMIME(unittest.TestCase):
attachHTML(self.msg, "<p>Some basic textual content</p>")
self.assertEqual(invokeEmail2PDF(self.msg), 0)
def test_pdf(self):
addHeaders(self.msg, "From", "To", "Subject")
attachText(self.msg, "Some basic textual content")
filename = attachPDF(self.msg, "Some PDF content")
self.assertEqual(invokeEmail2PDF(self.msg), 0)
self.assertTrue(os.path.exists(filename))
os.unlink(filename)
def tearDown(self):
time.sleep(DELAY)