def server_actions(): processor = smtpproc.SMTPProcessor( socket_=self.server_connection, delivery_handler=self.dummy_handler) processor.smtp_greeting() processor._readline() processor.smtp_hello('nobody')
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()
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)
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
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)
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)
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, '', {})
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 == "*****@*****.**"
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
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)
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
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)
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)
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
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
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()
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
#!/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()
def server_actions(): processor = smtpproc.SMTPProcessor(socket_=self.server_connection, delivery_handler=handler, certfile=certfile, keyfile=keyfile) processor.process()
def server_actions(): processor = smtpproc.SMTPProcessor(socket_=self.server_connection, delivery_handler=handler) processor.process()
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)
def server_send(): processor = smtpproc.SMTPProcessor( socket_=self.server_connection, delivery_handler=self.dummy_handler) processor.send(200, "TEST") processor.send(200, ["TEST", "TEST2"])
def test_relay_headers(self): processor = smtpproc.SMTPProcessor( socket_=self.client_conn, delivery_handler=self.dummy_handler) return processor.relay_headers