一个简单的SMTP服务器(用Python实现)
你能推荐一个简单的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
至于读取邮件,根据你使用的服务器,有两种选择。
- 如果是POP邮件服务器 - 你可以使用poplib这个Python库:http://docs.python.org/library/poplib.html
- 如果是IMAP邮件服务器 - 你可以使用imaplib这个Python库:http://docs.python.org/library/imaplib.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
来把邮件保存到文件里。