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 create/update restrictions2027-02-01.

Check configured patterns in your project

The free EOLkits scanner processes files in your browser and flags selected related patterns in supported IaC and dependency files. File names and contents are not uploaded; bounded aggregate file and finding counts may be sent. It is not a complete source or AWS-account scan.

Prefer a 10-second check? Paste your config into the free AWS EOL checker. Pasted input is not uploaded; bounded first-party usage events may be sent.

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

Inspect the $299 report sample and availability →