Пример #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