Python 3 and Python 2 send email through gmail

TrustyTony 3 Tallied Votes 2K Views Share

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.

JoshuaBurleson commented: Thanks Tony! +3
# 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()
JoshuaBurleson 23 Posting Whiz

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

Tech B 48 Posting Whiz in Training

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)
JoshuaBurleson commented: Also, obviously, works great for subject-less emails +3
JoshuaBurleson 23 Posting Whiz

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
TrustyTony 888 ex-Moderator Team Colleague Featured Poster

Your subject is not string, but tuple. Pleae 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,

sureronald 0 Junior Poster

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

woooee 814 Nearly a Posting Maven

Nice. I would never have thought of using GMail.

JoshuaBurleson 23 Posting Whiz

Utilizing this for my pycontacts "address book" project.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.