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 TutorialESMTPFactory(protocol.ServerFactory):
48
def buildProtocol(self, addr):
50
p.delivery = TutorialDelivery()
54
smtpServerFactory = TutorialESMTPFactory()
56
smtpServerService = internet.TCPServer(2025, smtpServerFactory)
57
smtpServerService.setServiceParent(application)