Sendmail Errno[61] Connection Refused

53,920

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!

Share:
53,920

Related videos on Youtube

Tehnix
Author by

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, 2020

Comments

  • Tehnix
    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
      Mike Pennington about 13 years
      Your 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
      Adam over 10 years
      @MikePennington or they could use Gabriel's answer, which is very helpful. ;)
    • Charlie Parker
      Charlie Parker almost 6 years
      I 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
    Tehnix about 13 years
    Thank 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
    Charlie Parker almost 6 years
    what should "EMAIL_HOST, EMAIL_PORT" be? can you provide an example?
  • Charlie Parker
    Charlie Parker almost 6 years
    is it possible to not rely on running something before the actual python script starts?
  • Hrvoje
    Hrvoje over 3 years
    It 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
    Charlie Parker over 3 years
    @Harvey what are you referring to? I've been using my solution for months now...daily...
  • Hrvoje
    Hrvoje over 3 years
    It works only if you enable access for less secure apps: myaccount.google.com/lesssecureapps . I think you should put that in answer.
  • Charlie Parker
    Charlie Parker over 3 years
    sure why not, pasted your comment and upvoted your comment.
  • Charlie Parker
    Charlie Parker over 3 years
    @Harvey did you try creating a fake email or something like that? Did it work for you?
  • Hrvoje
    Hrvoje over 3 years
    Yes, it worked only after I enabled access for less secure apps.
  • j413254
    j413254 almost 3 years
    how would you close it after its job is done?
  • Max
    Max almost 3 years
    I 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
    dhgoratela over 2 years
    @j413254, keep it running in one terminal and hit ctrl+c when you're done
  • Josh Friedlander
    Josh Friedlander about 2 years
    the debugging server is only meant for debugging, it doesn't actually send email. you need to run (or rent) an SMTP server for that