954,515 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?

Python 3 and Python 2 send email through gmail

By Tony Veijalainen on Sep 6th, 2011 1:21 am

Dig up this for discussion thread request and some Googling. By little experiment found the different forms for sending message commands. Could no send in Python3 the code of program itself so only simple test "Hello". Sorry that subject is left incorrectly refering program name.

# thanks to http://segfault.in/2010/12/sending-gmail-from-python/
import sys
# Import smtplib for the actual sending function
import smtplib
try:
   input = raw_input
except:
   pass

# Import the email modules we'll need
from email.mime.text import MIMEText

# Create a text/plain message
msg = MIMEText("Hello from Python%s\n" % sys.version)
msg['Subject'] = 'The contents of %s' % sys.argv[0]
msg['From'], msg['To'] = "xxx@gmail.com", "yyy@gmail.com"

# Send the message via gmail SMTP server
s = smtplib.SMTP('smtp.gmail.com', 587)
s.ehlo()
s.starttls()
s.login(msg['From'], input('Password: ')) 

try:
   # Python 3.2.1
   s.send_message(msg)
except AttributeError:
   # Python 2.7.2
   s.sendmail(msg['From'], [msg['To']], msg.as_string())
   
s.quit()

Nice Tony, it works great! Exactly what I needed, and furthermore, thanks for the link so I could better understand the mechanics.

pyguy62
Posting Whiz
353 posts since Aug 2011
Reputation Points: 34
Solved Threads: 19
 

And to send text messages via the same methods.
Here is a link for the recipient address for different carriers.

import sys
import smtplib

def send(body, to = "3045555555@txt.att.net", username = "yourMail@gmail.com", password = "012345"):
  mail_server = smtplib.SMTP("smtp.gmail.com", 587)
  mail_server.ehlo()
  mail_server.starttls()
  mail_server.ehlo()
  mail_server.login(username, password)
  mail_server.sendmail(username, to, body)
  mail_server.close()

if __name__ == '__main__':
  text = raw_input("Text to send: ")
  send(text)
Tech B
Posting Whiz in Training
268 posts since May 2009
Reputation Points: 59
Solved Threads: 33
 

I'm getting a strange TypeError when I try to place it in a function:

def send(Uto,UFrom,Usubject,Umessage):
   import sys
   # Import smtplib for the actual sending function
   import smtplib
   try:
      input = raw_input
   except:
      pass

   # Import the email modules we'll need
   from email.mime.text import MIMEText

   # Create a text/plain message
   msg = MIMEText(Umessage)
   msg['Subject'] = UFrom,':',Usubject
   msg['From'], msg['To'] = "pythonthread@gmail.com", Uto

   # Send the message via gmail SMTP server
   s = smtplib.SMTP('smtp.gmail.com', 587)
   s.ehlo()
   s.starttls()
   s.login(msg['From'], 'pythonthread') 

   try:
      # Python 3.2.1
      s.send_message(msg)
   except AttributeError:
      # Python 2.7.2
      s.sendmail(msg['From'], [msg['To']], msg.as_string())
      
   s.quit()


send('pythonthread@gmail.com','me','win','I hope')


this is returning:

Traceback (most recent call last):
  File "E:\email.py", line 55, in <module>
    send('pythonthread@gmail.com','me','win','I hope')
  File "E:\email.py", line 47, in send
    s.send_message(msg)
  File "C:\Python32\lib\smtplib.py", line 803, in send_message
    g.flatten(msg_copy, linesep='\r\n')
  File "C:\Python32\lib\email\generator.py", line 91, in flatten
    self._write(msg)
  File "C:\Python32\lib\email\generator.py", line 144, in _write
    self._write_headers(msg)
  File "C:\Python32\lib\email\generator.py", line 364, in _write_headers
    elif _has_surrogates(v):
TypeError: expected string or buffer
pyguy62
Posting Whiz
353 posts since Aug 2011
Reputation Points: 34
Solved Threads: 19
 

Your subject is not string, but tuple. Please put your imports in beginning of code and if you want to only work in Python 3, you can take out the try statements for Python2.

pyTony
pyMod
Moderator
5,359 posts since Apr 2010
Reputation Points: 782
Solved Threads: 852
 
Dig up this for discussion thread request and some Googling. By little experiment found the different forms for sending message commands. Could no send in Python3 the code of program itself so only simple test "Hello". Sorry that subject is left incorrectly refering program name.


Nice script! I will use it somewhere

sureronald
Junior Poster
139 posts since May 2008
Reputation Points: 11
Solved Threads: 19
 

Nice. I would never have thought of using GMail.

woooee
Nearly a Posting Maven
2,454 posts since Dec 2006
Reputation Points: 777
Solved Threads: 714
 

Utilizing this for my pycontacts "address book" project.

pyguy62
Posting Whiz
353 posts since Aug 2011
Reputation Points: 34
Solved Threads: 19
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You
View similar articles that have also been tagged: