-
LambdaMail 1.0.0
StableRelease / Namespace das imagens (push) Successful in 1sRelease / Plano (reaproveitar as imagens?) (push) Successful in 4sRelease / ci (push) SkippedRelease / Build auth (linux/amd64) (push) SkippedRelease / Build migrations (linux/amd64) (push) SkippedRelease / Build protocols (linux/amd64) (push) SkippedRelease / Build rspamd (linux/amd64) (push) SkippedRelease / Build storage (linux/amd64) (push) SkippedRelease / Build webmail (linux/amd64) (push) SkippedRelease / Build auth (linux/arm64) (push) SkippedRelease / Build migrations (linux/arm64) (push) SkippedRelease / Build protocols (linux/arm64) (push) SkippedRelease / Build rspamd (linux/arm64) (push) SkippedRelease / Build storage (linux/arm64) (push) SkippedRelease / Build webmail (linux/arm64) (push) SkippedRelease / Publica auth (push) Successful in 20sRelease / Publica migrations (push) Successful in 20sRelease / Publica rspamd (push) Successful in 21sRelease / Publica protocols (push) Successful in 22sRelease / Publica webmail (push) Successful in 20sRelease / Publica storage (push) Successful in 21sRelease / Cria a release no Gitea (push) Skippedreleased this
2026-10-30 15:26:52 +00:00 | 2 commits to main since this releaseImages
git.lucasrguerra.dev.br/lucasrguerra/lambdamail/protocols:1.0.0 git.lucasrguerra.dev.br/lucasrguerra/lambdamail/auth:1.0.0 git.lucasrguerra.dev.br/lucasrguerra/lambdamail/storage:1.0.0 git.lucasrguerra.dev.br/lucasrguerra/lambdamail/webmail:1.0.0 git.lucasrguerra.dev.br/lucasrguerra/lambdamail/migrations:1.0.0 git.lucasrguerra.dev.br/lucasrguerra/lambdamail/rspamd:1.0.0The first tagged release. Earlier work was never tagged, so this entry sums up
everything from the first commit on 2026-07-23 to the move to Gitea. Gaps that
remain are listed in the README under
What is not finished.Mail server
- SMTP MX and Submission (587 STARTTLS, 465 implicit TLS), IMAP with UID, flags,
IDLE, CONDSTORE,SEARCH,EXPUNGE,COPYandMOVE, POP3 and ManageSieve. - SPF, DKIM (Ed25519 and RSA dual signature), DMARC, ARC sealing, MTA-STS and
DANE on delivery, and TLS-RPT report ingestion. - Rspamd scoring with greylisting, RBLs and rate limiting, and ClamAV.
- A durable outbound queue in Postgres with the retry ladder and RFC 3464
bounces, a smarthost fallback for hosts with port 25 blocked, and a
configurable SPF term for the relay (RELAY_SPF_INCLUDE). - Mail addressed to this server is delivered locally instead of going out to the
internet and back. - Every submitted message is kept in the sender's Sent folder; app passwords
sign in over SMTP, IMAP and POP3. - Sieve rules evaluated at delivery, custom folders, and an RFC 5230 vacation
responder that replies in thread and once per sender per week.
Webmail and console
- A complete redesign of both surfaces (the "Nocturne" interface): dark and light
themes, a command menu onCtrl K/Cmd K,cand/shortcuts, an
installable app with its own icon, and a drawn logo. - Conversations in cascade, with who wrote, how many, and whether you have
answered; reply, reply all, important mail, undo send, and drafts that replace
the previous autosave. - A reader that suits both themes: plain messages take the app's colours,
designed ones keep their white sheet, quoted history folds away, remote images
are blocked until allowed. - Trusted senders, kept on the server per mailbox: their mail skips spam and
always shows images. - Webmail sessions of 30 days that renew while used, several accounts signed in
at once and switchable from the sidebar; the console stays at 8 hours. - Profile photos with a circular crop editor, and per-domain BIMI logo hosting
and validation, published to DNS and kept in step with the logo. - Admin console with server-side paging and filtering, user editing (role,
quota, language, password, second factor), aliases, a diagnostics page, and
isolation between the user and admin surfaces. Domain admins are confined to
their own domain. - English, Portuguese and Spanish, with a test that every string exists
in all of them.
DNS and TLS
- Cloudflare reconciliation of the expected records for every active domain,
idempotent, with per-record verification against public resolvers; a DKIM
record is never published with an empty key. - A TLS panel that states the digest the TLSA record must carry, and documented
steps for turning DANE on.TLS_MODE=traefik(default) oracme.
Security
- Two-factor sign-in with TOTP and recovery codes; enrolment can no longer
replace a secret the authenticator already has, enable MFA without recovery
codes, or kill the auth service.make reset-mfarecovers a broken enrolment. - Argon2 concurrency is bounded, so a login flood cannot take the auth service
down. - All service containers run as non-root; images are scanned with Trivy and the
build fails on HIGH or CRITICAL findings. - Dependencies updated for two published advisories:
next15.5.28
(unauthenticated remote code execution in image optimisation,
GHSA-2464-fhr4-w9xw) andgo-jose4.1.6 (denial of service).
Deployment and CI
- The deploy host pulls images that CI built and tested; nothing is compiled on
the server. The compose file pins Traefik to the proxy network by name. - Moved to Gitea. The source, the workflows (
.gitea/workflows) and the
container images now live ongit.lucasrguerra.dev.br; the images are
published forlinux/amd64andlinux/arm64under
git.lucasrguerra.dev.br/lucasrguerra/lambdamail/<service>and thev*tag
creates a release with notes. See docs/RELEASING.md. - CI caches npm, Go modules, the embedded Postgres, Trivy's database and image
layers. Release recognises images it already published for the same sources
(inputs-<hash>tag), so a documentation change or a version tag never
rebuilds them. - One
.env.examplefor development and production, andscripts/init-env.sh
to create.envwith random secrets (make env). It replaces
.env.production.example.
Fixed
- Webmail healthcheck: Next binds IPv4 only and
wgetresolvedlocalhostto
::1. - The admin lockout, a draft that did not discard, folder counters, a vacation
reply that was not a reply, DNS panels that reported published records as
missing, and the reconcile button that created nothing. - Migrations: a default partition for
email_messages.
Downloads
- SMTP MX and Submission (587 STARTTLS, 465 implicit TLS), IMAP with UID, flags,