在Python中接收电子邮件SMTPSERVER:(Receiving email with SMT

2019-09-21 01:30发布

我在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”未实现这样服务器不能正确答复接收进一步数据/与电子邮件通信 - 发送计算机(我假定是客户端)。

如果不喜欢EHLO这样一个基本的东西在Ubuntu的安装来实现摆在首位? 为什么不执行?

(2)我想,EHLO可以通过在Ubuntu安装后缀来安装。 我这样做,和相同的测试呼叫继续,但后来与其他错误而停止:

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

它的情况是正在运行的后缀。 停止postfix服务后的地址是不再使用,但当然是回到问题#1:

502 Error: command "EHLO" not implemented

我想能够使用SMTPSERVER接收电子邮件1.无需安装后缀2.使用asyncore的

如果有,如何使用Python库,使之成为可能容易和简单的方式任何想法,这将是伟大的!

干杯亚历克斯

Answer 1:

1)后缀是SMTP服务器,它无关python的smtpd EHLO执行。 如果您希望自定义的SMTP服务器,你不需要后缀,可以随意将其删除。

2) EHLOESMTP命令,而不是SMTP ,标准smtpd蟒模块实现SMTP ,因此它不具有EHLO实现。



Answer 2:

尝试这个。 当然,它没有实现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是不向后兼容似乎 - 运气这么好。



文章来源: Receiving email with SMTPServer in python:
标签: python smtp