在python中使用SMTPServer接收电子邮件:

时间:2012-08-08 15:45:07

标签: python smtp

我在Linux下有一个小应用程序来接收使用smtpd.SMTPServer的电子邮件。这是一个小测试代码:

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)
        return

server = CustomSMTPServer(('0.0.0.0', 25), None)
asyncore.loop()

我有以下问题: (1)使用这段代码时,发送电子邮件的计算机会收到以下消息:     502错误:命令“EHLO”未实现 所以服务器无法正确回复以接收更多数据/与电子邮件发送计算​​机(我假设是客户端)进行通信。

首先,不应该在Ubuntu安装中实现像EHLO这样的基本内容吗?为什么没有实施?

(2)我认为可以通过在Ubuntu中安装postfix来安装EHLO。我做了那个,同样的测试调用继续进行,但后来因为一个不同的错误而停止了:

Client: RCPT TO: XXX@YYY.com
Server: 554 5.7.1 <XXX@YYY>: Relay access denied

(3)稍后,在做了一些其他测试之后,我从测试代码本身得到了错误:

error: [Errno 98] Address already in use

事实证明,使用过的IP地址已经在使用,如

所示
netstat -lnpt

其中案例是运行后缀。停止后缀服务后,该地址不再使用,但当然它又回到了问题#1:

502 Error: command "EHLO" not implemented

我希望能够使用SMTPServer接收电子邮件 1.无需安装postfix 2.使用asyncore

如果有任何关于如何使用python库以简单易用的方式实现这一点的想法,那就太棒了!

干杯   亚历

2 个答案:

答案 0 :(得分:4)

1)Postfix是一个SMTP服务器,它与python的smtpd EHLO实现无关。如果您需要自定义SMTP服务器,则不需要后缀,因此请随意将其删除。

2)EHLOESMTP命令,而不是SMTP,标准smtpd python模块实现SMTP,因此它没有EHLO 1}}实施。

答案 1 :(得分:0)

试试这个。 当然,它没有实现EHLO命令,但是它使它与HELO命令一样对待它。当然,它可能只会让你通过第一个绊脚石,但是如果其余的smtp命令兼容,它可能会让你:

您可能会在/usr/lib/python2.7中找到smtpd.py文件

def smtp_HELO(self, arg):
    if not arg:
        self.push('501 Syntax: HELO hostname')
        return
    if self.__greeting:
        self.push('503 Duplicate HELO/EHLO')
    else:
        self.__greeting = arg
        self.push('250 %s' % self.__fqdn)

#copy the above function and rename it smtp_EHLO

def smtp_EHLO(self, arg):
    if not arg:
        self.push('501 Syntax: HELO hostname')
        return
    if self.__greeting:
        self.push('503 Duplicate HELO/EHLO')
    else:
        self.__greeting = arg
        self.push('250 %s' % self.__fqdn)

另外,我注意到同一个库的python3.5版本看起来它支持EHLO,所以也许你可以尝试使用python3。但显然python3似乎没有向后兼容 - 祝你好运。