# 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 ```bash 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: ```bash 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`, port `3025`, security `plain` - IMAP host `127.0.0.1`, port `3143`, security `plain` - 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 ```bash docker compose --env-file .env down -v ```