lyrathorpe bde999185a
Build and publish container / build (push) Has been cancelled
Fix POP3/SMTP correctness and IMAP robustness (#10)
POP3/SMTP proxy correctness fixes.

- RETR now returns the message body (reads the FETCH tuple). Closes #1
- Maildrop snapshotted once; DELE marks survive STAT/LIST/UIDL. Closes #2
- RETR/TOP dot-stuff and CRLF-terminate per RFC 1939. Closes #3
- SMTP relays raw bytes, no UTF-8 mangling. Closes #4
- Message sizes batched in one IMAP round-trip off the event loop; IMAP timeout added. Closes #5
- POP3 TOP implemented. Closes #6

pytest: 10 passed.
Reviewed-on: #10
Co-authored-by: Lyra Thorpe <iam@emmathe.dev>
Co-committed-by: Lyra Thorpe <iam@emmathe.dev>
2026-06-17 17:33:09 +01:00

Legacy Email Proxy

Proxy an unauthenticated, unencrypted POP3 / SMTP server to authenticated IMAPS and SMTPS backends.

Features

  • Exposes legacy POP3 on 0.0.0.0:110 and legacy SMTP on 0.0.0.0:25
  • Forwards POP3 mailbox access to an IMAP backend
  • Forwards SMTP submissions to an SMTPS backend
  • Backend host, ports, and credentials are configured via environment variables

Environment Variables

  • POP3_BIND_ADDR (default 0.0.0.0)

  • POP3_BIND_PORT (default 110)

  • SMTP_BIND_ADDR (default 0.0.0.0)

  • SMTP_BIND_PORT (default 25)

  • BACKEND_IMAP_HOST

  • BACKEND_IMAP_PORT (default 993)

  • BACKEND_IMAP_USER

  • BACKEND_IMAP_PASS

  • BACKEND_IMAP_USE_SSL (default true)

  • BACKEND_IMAP_USE_STARTTLS (default false)

  • BACKEND_SMTP_HOST

  • BACKEND_SMTP_PORT (default 465)

  • BACKEND_SMTP_USER

  • BACKEND_SMTP_PASS

  • BACKEND_SMTP_USE_SSL (default true)

  • BACKEND_SMTP_USE_TLS (default false)

Build and run

This project targets the latest Python LTS release. The included Dockerfile uses python:3.12-slim, which is compatible with Python 3.12 and later LTS releases.

docker build -t legacy-email-proxy .
docker run --rm -p 110:110 -p 25:25 \
  -e BACKEND_IMAP_HOST=imap.example.com \
  -e BACKEND_IMAP_PORT=993 \
  -e BACKEND_IMAP_USER=imap-user \
  -e BACKEND_IMAP_PASS=imap-pass \
  -e BACKEND_SMTP_HOST=smtp.example.com \
  -e BACKEND_SMTP_PORT=465 \
  -e BACKEND_SMTP_USER=smtp-user \
  -e BACKEND_SMTP_PASS=smtp-pass \
  legacy-email-proxy

Tests

Install development dependencies and run the test suite:

python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
pip install -r requirements-dev.txt
pytest -q

Notes

This implementation begins the proxy with a minimal POP3 command set and SMTP delivery path. It is designed to start development on the required application architecture.

S
Description
No description provided
Readme 101 KiB
Languages
Python 98.7%
Dockerfile 1.3%