一个简单的SMTP服务器(用Python实现)

43 投票
9 回答
137734 浏览
提问于 2025-04-15 21:54

你能推荐一个简单的SMTP服务器吗?我说的简单就是它的功能很基础,比如可以用来读邮件、写邮件和删邮件。这种服务器可以在Linux系统上运行就行。我只需要把邮件的核心内容转换成XML格式,然后通过FTP传输到另一台机器上。

9 个回答

12

为了让Hasen的脚本在Python 3中正常运行,我稍微修改了一下它:

from datetime import datetime
import asyncore
from smtpd import SMTPServer

class EmlServer(SMTPServer):
    no = 0
    def process_message(self, peer, mailfrom, rcpttos, data, **kwargs):
        filename = '%s-%d.eml' % (datetime.now().strftime('%Y%m%d%H%M%S'),
            self.no)
        print(filename)
        f = open(filename, 'wb')
        f.write(data)
        f.close
        print('%s saved.' % filename)
        self.no += 1

def run():
    EmlServer(('localhost', 25), None)
    try:
        asyncore.loop()
    except KeyboardInterrupt:
        pass

if __name__ == '__main__':
    run()
28

发送邮件其实只需要两样东西:

  • 一个SMTP服务器 - 这可以是Python的SMTP服务器,或者你可以用GMail,或者你网络服务提供商的服务器。大多数情况下,你不需要自己搭建一个服务器。
  • 一个SMTP库 - 这个库的作用是向SMTP服务器发送邮件请求。Python自带一个叫做smtplib的库,可以帮你完成这个任务。关于如何使用它的信息可以在这里找到:http://docs.python.org/library/smtplib.html

至于读取邮件,根据你使用的服务器,有两种选择。

55

看看这个 SMTP接收服务器:

from __future__ import print_function
from datetime import datetime
import asyncore
from smtpd import SMTPServer

class EmlServer(SMTPServer):
    no = 0
    def process_message(self, peer, mailfrom, rcpttos, data):
        filename = '%s-%d.eml' % (datetime.now().strftime('%Y%m%d%H%M%S'),
                self.no)
        f = open(filename, 'w')
        f.write(data)
        f.close
        print('%s saved.' % filename)
        self.no += 1


def run():
    # start the smtp server on localhost:1025
    foo = EmlServer(('localhost', 1025), None)
    try:
        asyncore.loop()
    except KeyboardInterrupt:
        pass


if __name__ == '__main__':
    run()

它使用 smtpd.SMTPServer 来把邮件保存到文件里。

撰写回答