【问题标题】:python SMTP - socket errorpython SMTP - 套接字错误
【发布时间】:2014-03-30 21:48:03
【问题描述】:

我有一个 python 脚本可以在 localhost 中运行 SMTP 服务器。这是我非常简单的代码:

import smtpd
import asyncore

class CustomSMTPServer (smtpd.SMTPServer):

    def process_message(self, peer, mailfrom, rcpttos, data):
        print 'Receiving message from:', peer
        print 'Message addressed from:', mailfrom
        print 'Message addressed to  :', rcpttos
        print 'Message length        :', len(data)

 server = CustomSMTPServer(('127.0.0.1', 25), None)

 asyncore.loop()

如果我从在 localhost 上运行的电子邮件客户端发送电子邮件,则电子邮件会成功到达 STMP 服务器。但是,如果我从位于同一本地网络 (192.168.1.1/24) 的计算机中运行的电子邮件客户端发送电子邮件,则不会成功。下面是我从 Outlook Express 得到的错误:

The connection to the server has failed. Account 'localhost', Server '192.168.1.115'.        
Protocol SMTP, Port: 25, Secure(SSL): No, Socket Error: 10061, Error Number: 0x800CCC0E

以防万一,我在两台 PC 上都停用了 McAfee 防火墙,但我仍然遇到相同的错误。

问题可能出在哪里?它与 asyncore.loop() 方法有什么关系吗?谢谢!

【问题讨论】:

    标签: python sockets smtp


    【解决方案1】:

    您的服务器正在环回接口上运行:

    server = CustomSMTPServer(('127.0.0.1', 25), None)
    

    该接口无法从任何外部网络访问,只能从本地计算机访问。

    您需要在真实的网络接口(例如 192.168.1.115,根据错误消息)启动您的电子邮件服务器。

    另外,我怀疑您无论如何都无法检索任何消息。您正在运行 SMTP 服务器:它通过 SMTP 接受消息,但不提供 POP3/IMAP 服务,因此您无法使用远程电子邮件客户端检索消息。不过,SMTP 服务器可用于将消息存储在基于文件的本地消息存储中(如果格式正确,运行在同一台机器上的电子邮件客户端可以从文件中检索消息)。

    【讨论】:

      猜你喜欢
      • 2015-07-20
      • 2018-10-30
      • 2016-10-26
      • 2021-10-21
      • 2012-10-30
      • 2016-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多