Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Use Python 3 to send an email with an attachment using Gmail
#!/usr/bin/env python
# encoding: utf-8
"""
python_3_email_with_attachment.py
Created by Robert Dempsey on 12/6/14.
Copyright (c) 2014 Robert Dempsey. Use at your own peril.
This script works with Python 3.x
NOTE: replace values in ALL CAPS with your own values
"""
import os
import smtplib
from email import encoders
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
COMMASPACE = ', '
def main():
sender = 'YOUR GMAIL ADDRESS'
gmail_password = 'YOUR GMAIL PASSWORD'
recipients = ['EMAIL ADDRESSES HERE SEPARATED BY COMMAS']
# Create the enclosing (outer) message
outer = MIMEMultipart()
outer['Subject'] = 'EMAIL SUBJECT'
outer['To'] = COMMASPACE.join(recipients)
outer['From'] = sender
outer.preamble = 'You will not see this in a MIME-aware mail reader.\n'
# List of attachments
attachments = ['FULL PATH TO ATTACHMENTS HERE']
# Add the attachments to the message
for file in attachments:
try:
with open(file, 'rb') as fp:
msg = MIMEBase('application', "octet-stream")
msg.set_payload(fp.read())
encoders.encode_base64(msg)
msg.add_header('Content-Disposition', 'attachment', filename=os.path.basename(file))
outer.attach(msg)
except:
print("Unable to open one of the attachments. Error: ", sys.exc_info()[0])
raise
composed = outer.as_string()
# Send the email
try:
with smtplib.SMTP('smtp.gmail.com', 587) as s:
s.ehlo()
s.starttls()
s.ehlo()
s.login(sender, gmail_password)
s.sendmail(sender, recipients, composed)
s.close()
print("Email sent!")
except:
print("Unable to send the email. Error: ", sys.exc_info()[0])
raise
if __name__ == '__main__':
main()
@mlape
Copy link

mlape commented Nov 7, 2015

How would one add a message to this email?

@summer-liu
Copy link

summer-liu commented Jun 12, 2016

from email.mime.text import MIMEText

text = "EMAIL MESSAGE"
outer.attach(
MIMEText(text, 'plain')) # or 'html'

@ZeevBB
Copy link

ZeevBB commented Sep 30, 2017

Thank you. Works nicely

@Rkauff
Copy link

Rkauff commented Dec 28, 2017

This is great! Can I suggest adding "Import Sys" at the top?

@adityaridha
Copy link

adityaridha commented Feb 18, 2018

Hi, I tried to follow your code to send html file, it successfully sent but when i open the file in browser it become messy yet the html format is the same as the original. Do you know what is the issue ?

Thank you in advance

@karanchawda95
Copy link

karanchawda95 commented Feb 19, 2018

I also have the same problem as of adityaridha. Any help asap would be appreciated. Thanks in advance.

@aishenghuomeidaoli
Copy link

aishenghuomeidaoli commented Jul 25, 2018

good job

@shadabshaukat
Copy link

shadabshaukat commented Aug 3, 2018

Can i upload this script to my blog and give you credit for the script with a back link ?

@SoaQa
Copy link

SoaQa commented Nov 21, 2018

thank you!

@renesax14
Copy link

renesax14 commented Apr 24, 2020

does this work for sending pdfs too?

@martinig94
Copy link

martinig94 commented Oct 24, 2020

does this work for sending pdfs too?

Yep. it does

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment