Sendmail Errno[61] Connection Refused
I've been trying to get my application to mail some outputted text to an email. For simplification I have isolated the script :
import smtplib
import sys
import os
SERVER = "localhost"
FROM = os.getlogin()
TO = [raw_input("To : ")]
SUBJECT = "Message From " + os.getlogin()
print "Message : (End with ^D)"
TEXT = ''
while 1:
line = sys.stdin.readline()
if not line:
break
TEXT = TEXT + line
# Prepare actual message
message = """\
From: %s
To: %s
Subject: %s
%s
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)
# Send the mail
server = smtplib.SMTP(SERVER)
server.sendmail(FROM, TO, message)
server.quit()
This script outputs :
Traceback (most recent call last):
File "/Users/christianlaustsen/Dropbox/Apps - Python/mail/smtplib_mail.py", line 32, in <module>
server = smtplib.SMTP(SERVER)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/smtplib.py", line 239, in __init__
(code, msg) = self.connect(host, port)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/smtplib.py", line 295, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/smtplib.py", line 273, in _get_socket
return socket.create_connection((port, host), timeout)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/socket.py", line 512, in create_connection
raise error, msg
error: [Errno 61] Connection refused
So as you can see, the connection is being refused. I'm running Python 2.6 on Mac OS X Snow Leopard (if that's relevant).
I have tried searching around a lot, but haven't been able to find a solution. Any help will be appreciated.
Solution 1:
If you start a local server as follows:
python -m smtpd -n -c DebuggingServer localhost:1025
Make sure to modify the mail-sending code to use the non-standard port number:
server = smtplib.SMTP(SERVER, 1025)
server.sendmail(FROM, TO, message)
server.quit()
Solution 2:
My guess is that you do not have any SMTP server installed on your local machine.
If your emails are not sensitive, open a Gmail account and send your emails using it with Python.
Solution 3:
Start a simple SMTP server with Python like so:
python -m smtpd -n -c DebuggingServer localhost:1025
Solution 4:
If you don't want to run a separate server, and if you're only using Unix, you can use this technique, copied from http://www.yak.net/fqa/84.html, and originally from the Python FAQ:
On Unix, it's very simple, using sendmail. The location of the sendmail program varies between systems; sometimes it is /usr/lib/sendmail, sometime /usr/sbin/sendmail. The sendmail manual page will help you out. Here's some sample code:
SENDMAIL = "/usr/sbin/sendmail" # sendmail location
import os
p = os.popen("%s -t" % SENDMAIL, "w")
p.write("To: [email protected]\n")
p.write("Subject: test\n")
p.write("\n") # blank line separating headers from body
p.write("Some text\n")
p.write("some more text\n")
sts = p.close()
if sts != 0:
print "Sendmail exit status", sts