Campaign SMTP/IMAP Test Bed
This test bed provides dedicated non-production SMTP/IMAP infrastructure for campaign delivery checks. It uses GreenMail and must never be configured with production recipients or credentials.
Start
cd /mnt/DATA/git/govoplan-campaign/dev/mail-testbed
cp .env.example .env
docker compose --env-file .env up -d
Default endpoints:
- SMTP:
127.0.0.1:3025, plain transport - IMAP:
127.0.0.1:3143, plain transport - GreenMail API/UI endpoint:
127.0.0.1:38080
Smoke Test
Run the transport smoke from the core virtual environment after installing the campaign and mail modules:
cd /mnt/DATA/git/govoplan-campaign/dev/mail-testbed
set -a
. ./.env
set +a
/mnt/DATA/git/govoplan-core/.venv/bin/python run_transport_smoke.py
The smoke sends and appends three messages:
- no attachment
- one normal attachment
- one password-protected AES ZIP attachment
It verifies SMTP authentication, IMAP authentication, folder listing, delivery
to INBOX, and append-to-Sent behavior.
If the smoke is started immediately after docker compose up -d, GreenMail may
bind the SMTP/IMAP ports before the services are fully ready. The smoke retries
login and folder setup for GOVOPLAN_MAIL_TEST_READY_TIMEOUT_SECONDS.
Use With A Campaign
Use the same settings in a campaign mail profile:
- SMTP host
127.0.0.1, port3025, securityplain - IMAP host
127.0.0.1, port3143, securityplain - username and password from
.env - append folder from
GOVOPLAN_MAIL_TEST_SENT_FOLDER
When changing the mailbox, keep GOVOPLAN_MAIL_TEST_USER equal to
${GOVOPLAN_MAIL_TEST_LOCAL_PART}@${GOVOPLAN_MAIL_TEST_DOMAIN} because the
compose file creates the GreenMail account from local part, password, and
domain while login uses the full email address.
Then run the controlled sending checklist from
docs/CAMPAIGN_DELIVERY_RUNBOOK.md for no attachment, one attachment, and
password-protected ZIP campaign variants.
Stop
docker compose --env-file .env down -v