33 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import asyncio
 | |
| import uvloop
 | |
| from aiosmtpd.controller import Controller
 | |
| 
 | |
| # handler that just prints the message content
 | |
| class PrintHandler:
 | |
|     async def handle_DATA(self, server, session, envelope):
 | |
|         print("Message from:", envelope.mail_from)
 | |
|         print("Recipients:", envelope.rcpt_tos)
 | |
|         print("Message data:")
 | |
|         print(envelope.content.decode('utf8', errors='replace'))
 | |
|         print("End of message")
 | |
|         # Respond with a success code
 | |
|         return '250 Message accepted for delivery'
 | |
| 
 | |
| # uvloop for better performance
 | |
| asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
 | |
| 
 | |
| def run_server():
 | |
|     # SMTP server controller, binding to localhost on port 25
 | |
|     controller = Controller(PrintHandler(), hostname='127.0.0.1', port=25)
 | |
|     controller.start()
 | |
|     print("SMTP server running on port 25. Press Ctrl+C to stop.")
 | |
|     try:
 | |
|         # Run forever
 | |
|         asyncio.get_event_loop().run_forever()
 | |
|     except KeyboardInterrupt:
 | |
|         pass
 | |
|     finally:
 | |
|         controller.stop()
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     run_server()
 |