AWS Lambda / Python 3.12+

ModuleNotFoundError: No module named 'smtpd'

ModuleNotFoundError: No module named 'smtpd'

What it means

The standard-library smtpd module was removed in Python 3.12 (PEP 594).

Why it happens

`smtpd` was deprecated in Python 3.6 and removed from the standard library in Python 3.12. Code that imports `smtpd` (often `DebuggingServer` or a local test SMTP server) breaks when a Lambda function, layer, or build moves to the python3.12 runtime.

How to fix it

  1. Replace `smtpd` with the maintained `aiosmtpd` library (`pip install aiosmtpd`); it reimplements the same functionality on asyncio.
  2. For a drop-in shim, the `standard-smtpd` package on PyPI restores the removed module.
  3. If you only used `smtpd` for a test server, switch tests to `aiosmtpd.controller.Controller`.
  4. Bundle the replacement in your deployment package or a Lambda layer built for the target runtime.

Related deadline: Lambda Python 3.9 EOL2027-02-01.

Find every instance in your project

The free EOLkits scanner runs in your browser (nothing uploaded) and flags this and related breakages across your IaC and dependency files.

Primary source: https://docs.python.org/3/whatsnew/3.12.html

Get the full migration audit — $299, hash-anchored PDF →