2 from zope.interface import implements
4 from twisted.application import service
6 application = service.Application("SMTP Server Tutorial")
8 from twisted.application import internet
9 from twisted.internet import protocol, defer
11 from twisted.mail import smtp
13 class FileMessage(object):
14 implements(smtp.IMessage)
16 def __init__(self, fileObj):
17 self.fileObj = fileObj
19 def lineReceived(self, line):
20 self.fileObj.write(line + '\n')
22 def eomReceived(self):
24 return defer.succeed(None)
26 def connectionLost(self):
28 os.remove(self.fileObj.name)
30 class TutorialDelivery(object):
31 implements(smtp.IMessageDelivery)
34 def validateTo(self, user):
35 fileName = 'tutorial-smtp.' + str(self.counter)
37 return lambda: FileMessage(file(fileName, 'w'))
39 def validateFrom(self, helo, origin):
42 def receivedHeader(self, helo, origin, recipients):
43 return 'Received: Tutorially.'
45 class TutorialDeliveryFactory(object):
46 implements(smtp.IMessageDeliveryFactory)
48 def getMessageDelivery(self):
49 return TutorialDelivery()
51 class TutorialESMTPFactory(protocol.ServerFactory):
54 def buildProtocol(self, addr):
56 p.deliveryFactory = TutorialDeliveryFactory()
60 smtpServerFactory = TutorialESMTPFactory()
62 smtpServerService = internet.TCPServer(2025, smtpServerFactory)
63 smtpServerService.setServiceParent(application)