Created
December 6, 2014 21:30
-
-
Save rdempsey/22afd43f8d777b78ef22 to your computer and use it in GitHub Desktop.
Use Python 3 to send an email with an attachment using Gmail
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Yep. it does