-
-
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() |
Basically, you would just have to replace jpeg
with png
in lines 16 to 21 (while preserving the capitalization).
I've tried using this but can't get it working with iCloud email. I've tried switching to SMTP_SSL('smtp.mail.me.com', 587) as Apple says SSL is required with no luck.
after i modify the script, I am enjoying it with a shortcut on my iphone. How do I share it with my collegues who don't have pythonista? Anyway I can export the script so that my collegues can use it without pythonista?
Great work! I am using it to email post to Flickr. Thanks!
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?
@pawelratajczak Basically, you would have to set the
format
to'PNG'
in line 16, modify the mime type to'image', 'png'
in line 17, and change the filename to something likeimage.png
in line 21.