Initial import to Tizen
[profile/ivi/python-twisted.git] / doc / mail / tutorial / smtpserver / smtpserver-8.tac
1 import os
2 from zope.interface import implements
3
4 from twisted.application import service
5
6 application = service.Application("SMTP Server Tutorial")
7
8 from twisted.application import internet
9 from twisted.internet import protocol, defer
10
11 from twisted.mail import smtp
12
13 class FileMessage(object):
14     implements(smtp.IMessage)
15
16     def __init__(self, fileObj):
17         self.fileObj = fileObj
18
19     def lineReceived(self, line):
20         self.fileObj.write(line + '\n')
21
22     def eomReceived(self):
23         self.fileObj.close()
24         return defer.succeed(None)
25
26     def connectionLost(self):
27         self.fileObj.close()
28         os.remove(self.fileObj.name)
29
30 class TutorialDelivery(object):
31     implements(smtp.IMessageDelivery)
32     counter = 0
33
34     def validateTo(self, user):
35         fileName = 'tutorial-smtp.' + str(self.counter)
36         self.counter += 1
37         return lambda: FileMessage(file(fileName, 'w'))
38
39     def validateFrom(self, helo, origin):
40         return origin
41
42     def receivedHeader(self, helo, origin, recipients):
43         return 'Received: Tutorially.'
44
45 class TutorialDeliveryFactory(object):
46     implements(smtp.IMessageDeliveryFactory)
47
48     def getMessageDelivery(self):
49         return TutorialDelivery()
50
51 class TutorialESMTPFactory(protocol.ServerFactory):
52     protocol = smtp.ESMTP
53
54     def buildProtocol(self, addr):
55         p = self.protocol()
56         p.deliveryFactory = TutorialDeliveryFactory()
57         p.factory = self
58         return p
59
60 smtpServerFactory = TutorialESMTPFactory()
61
62 smtpServerService = internet.TCPServer(2025, smtpServerFactory)
63 smtpServerService.setServiceParent(application)