Spaces:
Paused
Paused
| #!/usr/bin/env python3 | |
| import asyncio | |
| from aiosmtpd.controller import Controller | |
| from aiosmtpd.smtp import SMTP | |
| # Accept a SMTP message and offer a way to retrieve the last message via TCP Socket | |
| last_received_message = b"Nothing" | |
| class CustomSMTPHandler: | |
| async def handle_DATA(self, server, session, envelope): | |
| global last_received_message | |
| last_received_message = envelope.content | |
| print('Receiving message from:', session.peer) | |
| print('Message addressed from:', envelope.mail_from) | |
| print('Message addressed to :', envelope.rcpt_tos) | |
| print('Message length :', len(envelope.content)) | |
| print(envelope.content.decode('utf8')) | |
| return '250 Message accepted for delivery' | |
| class EchoServerProtocol(asyncio.Protocol): | |
| def connection_made(self, transport): | |
| global last_received_message | |
| self.transport = transport | |
| peername = transport.get_extra_info('peername') | |
| print('Incoming connection from {}'.format(peername)) | |
| self.transport.write(last_received_message) | |
| last_received_message = b'' | |
| self.transport.close() | |
| async def main(): | |
| # Start the SMTP server | |
| controller = Controller(CustomSMTPHandler(), hostname='0.0.0.0', port=11025) | |
| controller.start() | |
| # Start the TCP Echo server | |
| loop = asyncio.get_running_loop() | |
| server = await loop.create_server( | |
| lambda: EchoServerProtocol(), | |
| '0.0.0.0', 11080 | |
| ) | |
| async with server: | |
| await server.serve_forever() | |
| if __name__ == "__main__": | |
| asyncio.run(main()) | |