Python email PDF: Some PDFs Getting Corrupted

Viewed 703

I am trying to attach a PDF file to an e-mail message.

For one PDF (a Word document printed to PDF), it works (the recipient opens it in Outlook with no problem).

Yet for other PDFs (which seem the same except for being a few KBs larger), they get corrupted.

Here is a sample to use which fails (becomes corrupted).

import smtplib, os
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.utils import formatdate
from email import encoders

attachment_path=r'C:\Directory'+'\\'

login='login'
password='password'
part=MIMEBase('application',"octet-stream")

def message(attachment): #attachment is just the PDF file name
    fromaddr = "example@example.com"
    cc=fromaddr
    msg = MIMEMultipart()
    msg['From'] = fromaddr
    msg['To'] = "example@example.com"
    msg['Date'] = formatdate(localtime = True)
    msg['Subject'] = "Subject"

    body='''
    <!DOCTYPE html>
    <html>
    <body>

    <p><font face="Tahoma" size=2> I hope everything is going well.</p></font> 

    </body>
    </html>
    '''
    msg.attach(MIMEText(body, 'html'))
    part.set_payload(open(attachment_path+attachment,'rb').read())
    encoders.encode_base64(part)
    part.add_header('Content-Disposition', 'attachment; filename="{0}"'.format(os.path.basename(attachment_path+attachment)))
    msg.attach(part)

    mail=smtplib.SMTP('Server',587)
    mail.ehlo()
    mail.starttls()
    mail.login(login,password)
    mail.sendmail(fromaddr,[toaddr,cc],msg.as_string())

I have tried using the following instead of base 64 encoding, but to no avail:

encoders.encode_noop(part)
encoders.encode_7or8bit(part)
encoders.encode_quopri(part)

Thanks in advance!

2 Answers

I have used below line of code and it is working fine for me.

part=MIMEBase('application/pdf',"octet-stream")
Related