示例#1
0
 def server_actions():
     processor = smtpproc.SMTPProcessor(
         socket_=self.server_connection,
         delivery_handler=self.dummy_handler)
     processor.smtp_greeting()
     processor._readline()
     processor.smtp_hello('nobody')
示例#2
0
    def test_smtp_reset(self):
        exceptions = queue.Queue()

        @background
        def client():
            client_processor = smtpproc.SMTPProcessor(
                socket_=self.client_conn,
                delivery_handler=self.dummy_handler)

            try:
                assert client_processor._readline().startswith(b"250 ")
                exceptions.put(None)
                exceptions.put(None)
            except Exception as exc:
                exceptions.put(exc)

        client()
        processor = smtpproc.SMTPProcessor(socket_=self.server_connection,
                                           delivery_handler=self.dummy_handler)
        processor.envelope_from = 'BLAH'
        processor.smtp_reset()
        assert not processor.envelope_from
        assert not exceptions.get()

        processor.envelope_from = 'BLAH'
        processor.smtp_reset(send_status=False)
        assert not processor.envelope_from
        assert not exceptions.get()
示例#3
0
 def server_actions():
     processor = smtpproc.SMTPProcessor(
         socket_=self.server_connection,
         delivery_handler=self.dummy_handler, certfile=certfile,
         keyfile=keyfile)
     processor.smtp_greeting()
     processor.smtp_hello('nobody', ehlo=True)
示例#4
0
 def test_iterlines(self):
     fuzzy_socket = FuzzySocket()
     process = smtpproc.SMTPProcessor(socket_=fuzzy_socket,
         delivery_handler=None)
     for line in fuzzy_socket.fuzz_lines:
         got = process._readline()
         assert got == line
示例#5
0
 def test_mail_invalid_from(self):
     processor = smtpproc.SMTPProcessor(
         socket_=self.client_conn,
         delivery_handler=self.dummy_handler)
     parameters = "ASDAS ASD ASD ASD"
     assert (processor.smtp_mail(parameters).code ==
             smtpproc.SYNTAX_ERROR.code)
示例#6
0
 def test_mail_no_address(self):
     processor = smtpproc.SMTPProcessor(
         socket_=self.client_conn,
         delivery_handler=self.dummy_handler)
     parameters = "FROM: SIZE=0"
     assert (processor.smtp_mail(parameters).code ==
             smtpproc.SYNTAX_ERROR.code)
示例#7
0
 def test_missing_status_assignment_regression(self):
     lines = ['fake','fake', 'data', 'data']
     processor = smtpproc.SMTPProcessor(
         socket_=self.client_conn,
         delivery_handler=self.dummy_handler)
     for line in lines:
         processor.dispatch(line, '', {})
示例#8
0
 def test_mail_valid_address(self):
     processor = smtpproc.SMTPProcessor(
         socket_=self.client_conn,
         delivery_handler=self.dummy_handler)
     parameters = "FROM: <*****@*****.**> SIZE=0"
     processor.smtp_mail(parameters)
     assert processor.envelope_from == "*****@*****.**"
示例#9
0
 def test_ssl_setup(self):
     certfile = os.path.join(TEST_DIRECTORY, 'resources', 'test.crt')
     keyfile = os.path.join(TEST_DIRECTORY, 'resources', 'test.key')
     processor = smtpproc.SMTPProcessor(socket_=None,
                                        delivery_handler=self.dummy_handler,
                                        certfile=certfile,
                                        keyfile=keyfile)
     assert processor.ssl_enabled
示例#10
0
 def test_smtp_recipient(self):
     processor = smtpproc.SMTPProcessor(
         socket_=self.client_conn,
         delivery_handler=self.dummy_handler)
     processor.smtp_recipient("*****@*****.**")
     processor.smtp_recipient("*****@*****.**")
     assert (set(("*****@*****.**", "*****@*****.**")) ==
             self.dummy_handler.recipients)
示例#11
0
    def test_readline(self):
        self.send_lines(self.simple_test_lines)
        processor = smtpproc.SMTPProcessor(socket_=self.server_connection,
                                           delivery_handler=self.dummy_handler)

        for line in self.simple_test_lines:
            received = processor._readline()
            assert received == line
示例#12
0
 def test_mail_size_exceeded(self):
     processor = smtpproc.SMTPProcessor(
         socket_=self.client_conn,
         delivery_handler=self.dummy_handler)
     failure_size = processor.delivery_handler.max_size + 1
     parameters = "FROM: <> SIZE=%i" % failure_size
     assert (processor.smtp_mail(parameters).code ==
             smtpproc.STORAGE_EXCEEDED.code)
示例#13
0
        def client():
            client_processor = smtpproc.SMTPProcessor(
                socket_=self.client_conn,
                delivery_handler=self.dummy_handler)

            try:
                assert client_processor._readline().startswith(b"250 ")
                exceptions.put(None)
                exceptions.put(None)
            except Exception as exc:
                exceptions.put(exc)
示例#14
0
    def test_smtp_data(self):
        self.send_lines(self.simple_test_lines)
        processor = smtpproc.SMTPProcessor(
            socket_=self.server_connection,
            delivery_handler=self.dummy_handler)

        processor.smtp_data()
        for want, got in zip(
                self.simple_test_lines, self.dummy_handler.message_data[1:]):
            want = (want.replace(b"\r", b"").replace(
                b"\n", os.linesep.encode('ascii')))
            assert want == got
示例#15
0
    def test_write(self):
        @background
        def serve_lines():
            processor = smtpproc.SMTPProcessor(
                socket_=self.server_connection,
                delivery_handler=self.dummy_handler)
            for line in self.simple_test_lines:
                processor._write(line)

        serve_lines()
        client_processor = smtpproc.SMTPProcessor(
            socket_=self.client_conn, delivery_handler=self.dummy_handler)

        for line in self.simple_test_lines:
            assert client_processor._readline() == line
示例#16
0
    def test_reject_big_line(self):
        maxlinelen = 1000
        lines = [b"x\n"] * 1024
        lines.append(b"xx" * 100000 + b'\n')

        self.send_lines(lines=lines)
        processor = smtpproc.SMTPProcessor(socket_=self.server_connection,
                                           max_line_length=maxlinelen,
                                           delivery_handler=self.dummy_handler)

        for line in lines:
            if len(line) > maxlinelen:
                self.assertRaises(
                    smtpproc.LineTooLong, processor._readline)
            else:
                processor._readline()
示例#17
0
    def test_send(self):
        @background
        def server_send():
            processor = smtpproc.SMTPProcessor(
                socket_=self.server_connection,
                delivery_handler=self.dummy_handler)
            processor.send(200, "TEST")
            processor.send(200, ["TEST", "TEST2"])

        expected = ("200 TEST\r\n", "200-TEST\r\n", "200 TEST2\r\n")

        server_send()
        client_processor = smtpproc.SMTPProcessor(
            socket_=self.client_conn, delivery_handler=self.dummy_handler)

        for line in expected:
            got = client_processor._readline()
            expected = bytes(line, 'ascii') if isinstance(line, str) else line
            assert got == expected
示例#18
0
#!/usr/bin/env python3
import socket

import smtpproc
import smtpproc.handlers

# Create delivery handler that will pipe incoming messages into procmail.
mda = smtpproc.handlers.SubprocessDeliveryHandler(['/usr/bin/procmail'])

# Bind to port 25 and listen for connections
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('0.0.0.0', 25))
server.listen(1)

# Accept connections and process incoming email forever.
while True:
    connection, _ = server.accept()
    processor = smtpproc.SMTPProcessor(connection, mda)
    processor.process()
示例#19
0
 def server_actions():
     processor = smtpproc.SMTPProcessor(socket_=self.server_connection,
                                        delivery_handler=handler,
                                        certfile=certfile,
                                        keyfile=keyfile)
     processor.process()
示例#20
0
 def server_actions():
     processor = smtpproc.SMTPProcessor(socket_=self.server_connection,
                                        delivery_handler=handler)
     processor.process()
示例#21
0
 def serve_lines():
     processor = smtpproc.SMTPProcessor(
         socket_=self.server_connection,
         delivery_handler=self.dummy_handler)
     for line in self.simple_test_lines:
         processor._write(line)
示例#22
0
 def server_send():
     processor = smtpproc.SMTPProcessor(
         socket_=self.server_connection,
         delivery_handler=self.dummy_handler)
     processor.send(200, "TEST")
     processor.send(200, ["TEST", "TEST2"])
示例#23
0
 def test_relay_headers(self):
     processor = smtpproc.SMTPProcessor(
         socket_=self.client_conn,
         delivery_handler=self.dummy_handler)
     return processor.relay_headers