Sendmail Errno[61] Connection Refused
Solution 1
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 2
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 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
Solution 5
I wanted to create something so that you could just copy paste it and have it work but this is the closest I got:
from email.message import EmailMessage
import smtplib
import os
def send_email(message,destination):
# important, you need to send it to a server that knows how to send e-mails for you
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
# don't know how to do it without cleartexting the password and not relying on some json file that you dont git control...
server.login('[email protected]', 'password_for_gmail')
msg = EmailMessage()
msg.set_content(message)
msg['Subject'] = 'TEST'
msg['From'] = '[email protected]'
msg['To'] = destination
server.send_message(msg)
if __name__ == '__main__':
send_email('msg','destination@email')
I feel the tutorial is misleading because it assumes without telling you very well that you already have a running server that sends e-mails for you...its odd. The only issue with my script is that I dont know how to make it work without having the cleartext password just written there but alas...at least it sends it? Just make a fake e-mail address or something...
made this question long time ago, so I don't remember what this means exactly put will put it here just in case:
It works only if you enable access for less secure apps: myaccount.google.com/lesssecureapps . I think you should put that in answer.
I probably went around it by using a fake email only for that or somehting like that or an email from my org can't remember. Good luck!
Related videos on Youtube
Tehnix
Running around coding a bit. Especially enjoy Haskell, although I tend to get tangled in a mess of types often :/... I'm around on the webs, GitHub Blog (I'm super slow at updating it -.-, sorry..) On IRC (irc.freenode.net amongst others) as Tehnix and various other places
Updated on September 11, 2020Comments
-
Tehnix over 3 years
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.
-
Mike Pennington about 13 yearsYour first step in debugging... Go to the shell and type 'telnet localhost 25' If that does not work, the problem does not belong in SO
-
Adam over 10 years@MikePennington or they could use Gabriel's answer, which is very helpful. ;)
-
Charlie Parker almost 6 yearsI don't understand, docs.python.org/3/library/email.examples.html this is the first link given by google search and this question doesn't have a clear answer? How does one copy paste some piece of code that will work 100% and send an e-mail?
-
-
Tehnix about 13 yearsThank you, I was just stomped (don't know that much about smtp), since I could send a mail with sendmail and os.popen, I couldn't see why this would have been any different, but your answer clarifies it I guess :)... Thanks...
-
Charlie Parker almost 6 yearswhat should "EMAIL_HOST, EMAIL_PORT" be? can you provide an example?
-
Charlie Parker almost 6 yearsis it possible to not rely on running something before the actual python script starts?
-
Hrvoje over 3 yearsIt really cannot be that easily done:
smtplib.SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepted. Learn more at\n5.7.8 https://support.google.com/mail/?p=BadCredentials p25sm6790964edm.60 - gsmtp')
You'll get that for correct combination of usr/pss. -
Charlie Parker over 3 years@Harvey what are you referring to? I've been using my solution for months now...daily...
-
Hrvoje over 3 yearsIt works only if you enable access for less secure apps: myaccount.google.com/lesssecureapps . I think you should put that in answer.
-
Charlie Parker over 3 yearssure why not, pasted your comment and upvoted your comment.
-
Charlie Parker over 3 years@Harvey did you try creating a fake email or something like that? Did it work for you?
-
Hrvoje over 3 yearsYes, it worked only after I enabled access for less secure apps.
-
j413254 almost 3 yearshow would you close it after its job is done?
-
Max almost 3 yearsI did this, and I see output when I run my script that makes me think it is successful, but the email never shows up in my inbox. Any tips for debugging? The output when I run my script is
--MESSAGE FOLLOWS-- ... --END MESSAGE--
. -
dhgoratela over 2 years@j413254, keep it running in one terminal and hit ctrl+c when you're done
-
Josh Friedlander about 2 yearsthe debugging server is only meant for debugging, it doesn't actually send email. you need to run (or rent) an SMTP server for that