Cabalmail

Host your own email and enhance your privacy

View the Project on GitHub cabalmail/cabal-infra

Durable relay queues

Both SMTP tiers persist sendmail’s deferred-mail queue (/var/spool/mqueue) on the mailstore EFS filesystem, so a task replacement cannot destroy queued mail. Each tier has its own EFS access point (/smtp-queue for smtp-out, /smtp-in-queue for smtp-in — see terraform/infra/modules/efs/main.tf), and every task of a tier mounts the same queue directory. This is sendmail’s classic shared-NFS queue pattern: queue files are claimed with fcntl locks, so whichever task’s queue runner scans next picks up work a replaced task left behind. Only the MTA queue is persisted; clientmqueue stays on the container filesystem.

Why it matters on each tier:

Shutdown and retry timing

Verification

The behavior is verified end-to-end (park a message with the SMTP sinkhole’s forced 4xx, replace the task, watch the successor deliver) by the runbook in testing/queue-persistence.md. Design history: 0.9.x/smtp-out-queue-persistence-plan.md.