Python smtpd

来自百合仙子's Wiki
跳转到导航 跳转到搜索

示例

#!/usr/bin/env python3
# vim:fileencoding=utf-8

from smtpd import SMTPServer
import subprocess
import asyncore
import time

class MySMTPServer(SMTPServer):
  def process_message(self, peer, mailfrom, rcpttos, data):
    lines = data.split('\n')
    print('收到来自 %s 的发往 %s 的邮件' % (mailfrom, rcpttos))
    procmail = subprocess.Popen(["sudo", "-u", "lilydjwg", "procmail"], stdin=subprocess.PIPE)
    procmail.stdin.write(b'From lily@lily.10dig.net ' + time.ctime().encode())
    procmail.stdin.write(b'\n')
    procmail.stdin.write(b'Return-Path: <lily@lily.10dig.net>\n')
    procmail.stdin.write(b'Delivered-To: unknown\n')
    for line in lines:
      procmail.stdin.write(line.encode())
      procmail.stdin.write(b'\n')
    procmail.stdin.close()

if __name__ == '__main__':
  MySMTPServer(('0.0.0.0', 25), ('localhost', 25))
  try:
    asyncore.loop()
  except KeyboardInterrupt:
    pass

参见