Skip to content

smtpd Module

The smtpd module implements an SMTP server (daemon), allowing you to receive and process email.

Complexity Reference

Operation Time Space Notes
Server startup O(1) O(1) Listen on port
Handle message O(n) O(n) n = message size
Run loop O(m) O(m) m = concurrent connections

Creating SMTP Server

Simple SMTP Listener

import smtpd
import asyncore

class MyServer(smtpd.SMTPServer):
    def process_message(self, peer, mailfrom, rcpttos, data):
        """Process received message - O(n)"""
        print(f"From: {mailfrom}")
        print(f"To: {rcpttos}")
        print(f"Message:\\n{data.decode()}")
        return  # Accept message

# Create server - O(1)
server = MyServer(('localhost', 25), None)

# Run event loop - O(m)
asyncore.loop()