~certify-web-dev/twisted/certify-trunk

« back to all changes in this revision

Viewing changes to doc/examples/emailserver.py

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2004-06-21 22:01:11 UTC
  • mto: (2.2.3 sid)
  • mto: This revision was merged to the branch mainline in revision 3.
  • Revision ID: james.westby@ubuntu.com-20040621220111-vkf909euqnyrp3nr
Tags: upstream-1.3.0
ImportĀ upstreamĀ versionĀ 1.3.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
# Twisted, the Framework of Your Internet
 
3
# Copyright (C) 2001 Matthew W. Lefkowitz
 
4
 
5
# This library is free software; you can redistribute it and/or
 
6
# modify it under the terms of version 2.1 of the GNU Lesser General Public
 
7
# License as published by the Free Software Foundation.
 
8
 
9
# This library is distributed in the hope that it will be useful,
 
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
12
# Lesser General Public License for more details.
 
13
 
14
# You should have received a copy of the GNU Lesser General Public
 
15
# License along with this library; if not, write to the Free Software
 
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
17
 
 
18
"""
 
19
A toy email server.
 
20
"""
 
21
 
 
22
from twisted.internet import defer
 
23
from twisted.protocols import smtp
 
24
 
 
25
class ConsoleMessageDelivery:
 
26
    __implements__ = (smtp.IMessageDelivery,)
 
27
    
 
28
    def receivedHeader(self, helo, origin, recipients):
 
29
        return "Received: ConsoleMessageDelivery"
 
30
    
 
31
    def validateFrom(self, helo, origin):
 
32
        # All addresses are accepted
 
33
        return origin
 
34
    
 
35
    def validateTo(self, user):
 
36
        # Only messages directed to the "console" user are accepted.
 
37
        if user.dest.local == "console":
 
38
            return lambda: ConsoleMessage()
 
39
        raise smtp.SMTPBadRcpt(user)
 
40
 
 
41
class ConsoleMessage:
 
42
    __implements__ = (smtp.IMessage,)
 
43
    
 
44
    def __init__(self):
 
45
        self.lines = []
 
46
    
 
47
    def lineReceived(self, line):
 
48
        self.lines.append(line)
 
49
    
 
50
    def eomReceived(self):
 
51
        print "New message received:"
 
52
        print "\n".join(self.lines)
 
53
        self.lines = None
 
54
        return defer.succeed(None)
 
55
    
 
56
    def connectionLost(self):
 
57
        # There was an error, throw away the stored lines
 
58
        self.lines = None
 
59
 
 
60
class ConsoleSMTPFactory(smtp.SMTPFactory):
 
61
    def __init__(self, *a, **kw):
 
62
        smtp.SMTPFactory.__init__(self, *a, **kw)
 
63
        self.delivery = ConsoleMessageDelivery()
 
64
    
 
65
    def buildProtocol(self, addr):
 
66
        p = smtp.SMTPFactory.buildProtocol(self, addr)
 
67
        p.delivery = self.delivery
 
68
        return p
 
69
 
 
70
def main():
 
71
    from twisted.application import internet
 
72
    from twisted.application import service
 
73
    
 
74
    a = service.Application("Console SMTP Server")
 
75
    internet.TCPServer(2500, ConsoleSMTPFactory()).setServiceParent(a)
 
76
    
 
77
    return a
 
78
 
 
79
application = main()