Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to send email with pdf attachment in Python? [duplicate]

Possible Duplicate:
How to send Email Attachments with python

I would like to edit the following code and send an email with an attachment. Attachment is a pdf file, it is under /home/myuser/sample.pdf, in linux environment. What should I change below?

import smtplib  
fromaddr = '[email protected]'  
toaddrs  = '[email protected]'  
msg = 'Hello'  


# Credentials (if needed)  
username = 'myemail'  
password = 'yyyyyy'  

# The actual mail send  
server = smtplib.SMTP('smtp.gmail.com:587')  
server.starttls()  
server.login(username,password)  
server.sendmail(fromaddr, toaddrs, msg)  
server.quit()  
like image 940
alwbtc Avatar asked Aug 12 '12 09:08

alwbtc


People also ask

Can Python send an email with attachment?

Use Python's built-in smtplib library to send basic emails. Send emails with HTML content and attachments using the email package. Send multiple personalized emails using a CSV file with contact data.

How do I email a batch of PDF files?

Go to Mailings tab -> Click on Start Mail Merge and then Select Letters. Click on “Select Recipients” and choose your data source (CSV or Excel File) Click on Insert Merge Fields and customize the document as desired. Instead of selecting Finish and Merge, select Merge to Adobe PDF.

How do you send multiple emails in Python?

To send mail first, we need to import the module to send mail. Here in the module also using the MIME (Multipurpose Internet Mail Extension) module to make it more flexible. Using the MIME header, we can store the sender and receiver information and also some other details.


Video Answer


2 Answers

You create a message with an email package in this case -

from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEImage import MIMEImage
msg = MIMEMultipart()
msg.attach(MIMEText(open("/home/myuser/sample.pdf").read()))

and then send the message.

import smtplib
mailer = smtplib.SMTP()
mailer.connect()
mailer.sendmail(from_, to, msg.as_string())
mailer.close()

Several examples here - http://docs.python.org/library/email-examples.html

UPDATE

Updating the link since the above yields a 404 https://docs.python.org/2/library/email-examples.html. Thanks @Tshirtman


Update2: Simplest way to attach pdf

To attach the pdf use the pdf flag:

def send_email_pdf_figs(path_to_pdf, subject, message, destination, password_path=None):
    ## credits: http://linuxcursor.com/python-programming/06-how-to-send-pdf-ppt-attachment-with-html-body-in-python-script
    from socket import gethostname
    #import email
    from email.mime.application import MIMEApplication
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    import smtplib
    import json

    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.starttls()
    with open(password_path) as f:
        config = json.load(f)
        server.login('[email protected]', config['password'])
        # Craft message (obj)
        msg = MIMEMultipart()

        message = f'{message}\nSend from Hostname: {gethostname()}'
        msg['Subject'] = subject
        msg['From'] = '[email protected]'
        msg['To'] = destination
        # Insert the text to the msg going by e-mail
        msg.attach(MIMEText(message, "plain"))
        # Attach the pdf to the msg going by e-mail
        with open(path_to_pdf, "rb") as f:
            #attach = email.mime.application.MIMEApplication(f.read(),_subtype="pdf")
            attach = MIMEApplication(f.read(),_subtype="pdf")
        attach.add_header('Content-Disposition','attachment',filename=str(path_to_pdf))
        msg.attach(attach)
        # send msg
        server.send_message(msg)

inspirations/credits to: http://linuxcursor.com/python-programming/06-how-to-send-pdf-ppt-attachment-with-html-body-in-python-script

like image 125
verisimilitude Avatar answered Oct 19 '22 08:10

verisimilitude


The recommended way is using Python's email module in order to compose a properly formatted MIME messages. See docs

For python 2
https://docs.python.org/2/library/email-examples.html

For python 3
https://docs.python.org/3/library/email.examples.html

like image 39
Andreas Jung Avatar answered Oct 19 '22 08:10

Andreas Jung