Mock SMTP server that logs the emails it receives.
Listens to inbound connections from SMTP clients. Supports a very minimal set of SMTP features, but probably enough that most clients will communicate happily and emails will get "delivered" as expected.
This is useful in development, typically as part of a docker-compose.yml
.
There have been a couple cases recently where I wanted to work with an OSS tool that required a configured SMTP server (for instance, to send password reset or login link emails). The tool itself didn't offer an alternative, so creating a simple logging SMTP service seemed like the best way to go.
This is probably how you want to use smtp-logger
. This way your project does not need to depend on python (even though the docker image does).
The latest version of smtp-logger
is packaged in a docker image available at ghcr.io/literalgarage/smtp-logger:latest
.
For instance, to create an smtp
logger service in your docker-compose.yml
:
smtp:
image: ghcr.io/literalgarage/smtp-logger:latest
environment:
- SMTP_LOGGER_PORT=8025
ports:
- "8025:8025"
Install this library using pip
:
pip install smtp-logger
This provides an smtp-logger
binary:
> smtp-logger --host 0.0.0.0 --port 8025
It accepts only --host
and --port
parameters. These are optional.
If not supplied, the SMTP_LOGGER_HOST
and SMTP_LOGGER_PORT
environment variables are used. These are also optional.
If configuration is missing then, by default, SMTP_LOGGER_HOST
is 0.0.0.0
and SMTP_LOGGER_PORT
is 8025
.
This is the simplest SMTP logging implementation that worked for the specific cases I ran into. There are an enormous number of basic and advanced SMTP features this server doesn't yet support. Its handling of content-transfer-encoding
s is weak at the moment. It doesn't support TLS. etc.
I'd love your help improving this tool!
To contribute to this library, first checkout the code. Then create a new virtual environment:
cd smtp-logger
python -m venv .venv
source .venv/bin/activate
Now install the dependencies and test dependencies:
pip install -e '.[dev]'
To run tests:
make test
To run a full lint/typecheck/test pass:
make check