-
-
Save omz/4073599 to your computer and use it in GitHub Desktop.
# Example for sending an email with an attached image using smtplib | |
# | |
# IMPORTANT: You need to enter your email login in the main() function. | |
# The example is prepared for GMail, but other providers | |
# should be possible by changing the mail server. | |
import smtplib | |
from email.mime.base import MIMEBase | |
from email.mime.multipart import MIMEMultipart | |
from email import encoders | |
import Image | |
from io import BytesIO | |
def get_attachment(img): | |
bytes = BytesIO() | |
img.save(bytes, format='JPEG') | |
msg = MIMEBase('image', 'jpeg') | |
msg.set_payload(bytes.getvalue()) | |
encoders.encode_base64(msg) | |
msg.add_header('Content-Disposition', 'attachment', | |
filename='image.jpeg') | |
return msg | |
def main(): | |
### CHANGE THESE VALUES: | |
to = '[email protected]' | |
subject = 'Image from Pythonista' | |
gmail_user = 'YOUR_GMAIL_ADDRESS' | |
gmail_pwd = 'YOUR_PASSWORD' | |
#Load a sample image, modify as needed: | |
image = Image.open('Test_Lenna') | |
print 'Connecting...' | |
smtpserver = smtplib.SMTP("smtp.gmail.com", 587) | |
smtpserver.ehlo() | |
smtpserver.starttls() | |
smtpserver.ehlo | |
smtpserver.login(gmail_user, gmail_pwd) | |
print 'Preparing message...' | |
outer = MIMEMultipart() | |
outer['Subject'] = subject | |
outer['To'] = to | |
outer['From'] = gmail_user | |
outer.preamble = 'You will not see this in a MIME-aware email reader.\n' | |
attachment = get_attachment(image) | |
outer.attach(attachment) | |
composed = outer.as_string() | |
print 'Sending...' | |
smtpserver.sendmail(gmail_user, to, composed) | |
smtpserver.close() | |
print 'Done.' | |
if __name__ == '__main__': | |
main() |
How about emailing a .csv file created by another pythonista script? The files reside in the same directory as the python scripts. How can that be done?
I just started working on doing a csv file right. I'll post when I get it working. Meanwhile I think the key is to change the get_attachment function to use MIMEText instead of MIMEBase to fill the msg variable. MIMEText is used to create a text file attachment.
It needs to read the entire file into a variable and pass it as the argument to MIMEText. Something like:
'''
def get_attachment(file):
fp = open('file.csv', 'rb')
# Create a text/plain message
msg = MIMEText(fp.read())
fp.close()
return msg
'''
Sorry. There are several typos in that but I hope they are obvious. I'll post a working example when I get one working.
Close but no cigar. MIMEText sent the text file as the email message instead of as an attachment. That's not what O wanted and probably not what you (rabdeb) wanted. More research clearly needed. ;-)
Great piece of code but I keep on getting a username and password not accepted error. I know they are right because they are copied and pasted from lastpass which I use all the time. I have set Gmail up to accept less secure apps but that hasn't helped either. Any thoughts anyone?
Great work! I am using it to email post to Flickr. Thanks!