Sendmail Errno [61] Connection Refused

Teh*_*nix 35 python smtp smtplib

我一直试图让我的应用程序将一些输出的文本邮寄到电子邮件中.为了简化,我已经分离了脚本:

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()
Run Code Online (Sandbox Code Playgroud)

此脚本输出:

    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
Run Code Online (Sandbox Code Playgroud)

如您所见,连接被拒绝.我在Mac OS X Snow Leopard上运行Python 2.6(如果这是相关的).

我试过很多搜索,但一直没能找到解决方案.任何帮助将不胜感激.

小智 56

如果您按如下方式启动本地服务器:

python -m smtpd -n -c DebuggingServer localhost:1025

确保修改邮件发送代码以使用非标准端口号:

server = smtplib.SMTP(SERVER, 1025)
server.sendmail(FROM, TO, message)
server.quit()
Run Code Online (Sandbox Code Playgroud)


Ada*_*tan 16

我的猜测是你的本地机器上没有安装任何SMTP服务器.

如果您的电子邮件不敏感,请打开Gmail帐户,然后使用Python发送电子邮件.


Raj*_*Raj 12

使用Python启动一个简单的SMTP服务器,如下所示:

python -m smtpd -n -c DebuggingServer localhost:1025
Run Code Online (Sandbox Code Playgroud)

  • 它的工作完成后你将如何关闭它? (2认同)

Jos*_*son 5

如果您不想运行单独的服务器,并且您只使用 Unix,则可以使用此技术,该技术从http://www.yak.net/fqa/84.html复制,最初来自 Python常问问题:

在 Unix 上,使用 sendmail 非常简单。sendmail 程序的位置因系统而异;有时是 /usr/lib/sendmail,有时是 /usr/sbin/sendmail。sendmail 手册页将帮助您。这是一些示例代码:

SENDMAIL = "/usr/sbin/sendmail" # sendmail location
import os
p = os.popen("%s -t" % SENDMAIL, "w")
p.write("To: cary@ratatosk.org\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
Run Code Online (Sandbox Code Playgroud)