I am writing a program that sends an email using Python. What I have learned from various forums is the following piece of code:
#!/usr/bin/env python
import smtplib
sender = "[email protected]"
receivers = ["[email protected]"]
yourname = "Abhishek Sagar"
recvname = "receptionist"
sub = "Testing email"
body = "who cares"
message = "From: " + yourname + "\n"
message = message + "To: " + recvname + "\n"
message = message + "Subject: " + sub + "\n"
message = message + body
try:
print "Sending email to " + recvname + "...",
server = smtplib.SMTP('smtp.gmail.com:587')
username = '[email protected]'
password = '*****'
server.ehlo()
server.starttls()
server.login(username,password)
server.sendmail(sender, receivers, message)
server.quit()
print "successfully sent!"
except Exception:
print "Error: unable to send email"
But it is simply printing ""Error: unable to send email" and exits out on the terminal. How might I resolve this?
I modified the last two lines to
except Exception, error:
print "Unable to send e-mail: '%s'." % str(error)
I get the following error message :
Traceback (most recent call last):
File "./2.py", line 45, in <module>
smtpObj = smtplib.SMTP('localhost')
File "/usr/lib/python2.6/smtplib.py", line 239, in __init__
(code, msg) = self.connect(host, port)
File "/usr/lib/python2.6/smtplib.py", line 295, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib/python2.6/smtplib.py", line 273, in _get_socket
return socket.create_connection((port, host), timeout)
File "/usr/lib/python2.6/socket.py", line 514, in create_connection
raise error, msg
socket.error: [Errno 111] Connection refused
If message headers, payload contain non-ascii characters then they should be encoded:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from email.header import Header
from email.mime.text import MIMEText
from getpass import getpass
from smtplib import SMTP_SSL
login, password = '[email protected]', getpass('Gmail password:')
recipients = [login]
# create message
msg = MIMEText('message body…', 'plain', 'utf-8')
msg['Subject'] = Header('subject…', 'utf-8')
msg['From'] = login
msg['To'] = ", ".join(recipients)
# send it via gmail
s = SMTP_SSL('smtp.gmail.com', 465, timeout=10)
s.set_debuglevel(1)
try:
s.login(login, password)
s.sendmail(msg['From'], recipients, msg.as_string())
finally:
s.quit()
If you print the error message, you will likely get a comprehensive description of what error occurred. Try (no pun intended) this:
try:
# ...
except Exception, error:
print "Unable to send e-mail: '%s'." % str(error)
If, after reading the error message, you still do not understand your error, please update your question with the error message and we can help you some more.
Update after additional information:
the error message
socket.error: [Errno 111] Connection refused
means the remote end (e.g. the GMail SMTP server) is refusing the network connection. If you take a look at the smtplib.SMTP constructor, it seems you should change
server = smtplib.SMTP('smtp.gmail.com:587')
to the following.
server = smtplib.SMTP(host='smtp.gmail.com', port=587)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With