Add jsmtp-backed JMAP email submission #10

Merged
ober merged 16 commits from feature/email-submission-jsmtp into main 2026-08-10 10:56:10 -04:00
Owner

Summary

  • add EmailSubmission/set with a fail-closed submission_enabled config gate
  • hand accepted submissions to local jsmtp send using configured command/config paths
  • persist jsmtp-store mailbox/keyword overlays so the APK can mark read/unread, flag, and archive messages backed by the jsmtp store
  • bump repository/package/native versions to 0.2.2

Verification

  • make test
  • make security-gates
  • changed-file security scan, medium severity and above: no findings
  • make binary
  • ./jjmapd version -> jjmapd 0.2.2

Deployment / APK smoke evidence

The same behavior was deployed to the dns2 jsmtp jail and exercised from the debug APK before opening this PR:

  • APK compose submitted through EmailSubmission/set
  • jsmtp send queued the message
  • jail cron relay delivered it without a manual relay run
  • JMAP query returned the delivered message
  • emulator refresh decrypted and displayed the delivered message

The debug APK uploaded to Termux was ~/jerboa-mail-debug.apk with SHA256 cda13638e840c9ff608efc3616cb76b932b89f3058558a60d7350735676cea20.

## Summary - add `EmailSubmission/set` with a fail-closed `submission_enabled` config gate - hand accepted submissions to local `jsmtp send` using configured command/config paths - persist jsmtp-store mailbox/keyword overlays so the APK can mark read/unread, flag, and archive messages backed by the jsmtp store - bump repository/package/native versions to `0.2.2` ## Verification - `make test` - `make security-gates` - changed-file security scan, medium severity and above: no findings - `make binary` - `./jjmapd version` -> `jjmapd 0.2.2` ## Deployment / APK smoke evidence The same behavior was deployed to the dns2 `jsmtp` jail and exercised from the debug APK before opening this PR: - APK compose submitted through `EmailSubmission/set` - `jsmtp send` queued the message - jail cron relay delivered it without a manual relay run - JMAP query returned the delivered message - emulator refresh decrypted and displayed the delivered message The debug APK uploaded to Termux was `~/jerboa-mail-debug.apk` with SHA256 `cda13638e840c9ff608efc3616cb76b932b89f3058558a60d7350735676cea20`.
Add jsmtp-backed JMAP email submission
All checks were successful
version-policy / required (pull_request) Successful in 5s
required-ci / required (pull_request) Successful in 6m56s
b0b1319e0c
Make Android mail APK source reproducible
All checks were successful
version-policy / required (pull_request) Successful in 10s
required-ci / required (pull_request) Successful in 7m33s
d5079a7798
Harden Android JMAP transport pinning
All checks were successful
version-policy / required (pull_request) Successful in 5s
required-ci / required (pull_request) Successful in 7m11s
5251ac69b3
Fix Android APK version metadata
All checks were successful
version-policy / required (pull_request) Successful in 6s
required-ci / required (pull_request) Successful in 8m3s
4b273d178b
Add Android mail settings persistence
All checks were successful
version-policy / required (pull_request) Successful in 6s
required-ci / required (pull_request) Successful in 7m54s
e38a34e6d3
Add Android mail local cache
All checks were successful
version-policy / required (pull_request) Successful in 5s
required-ci / required (pull_request) Successful in 7m18s
1513c52bfe
Add Android background mail sync
All checks were successful
version-policy / required (pull_request) Successful in 6s
required-ci / required (pull_request) Successful in 7m57s
cf4c5a17b8
Add Android new mail notifications
All checks were successful
version-policy / required (pull_request) Successful in 5s
required-ci / required (pull_request) Successful in 7m10s
3bbfe31bb0
Add Android release APK signing workflow
All checks were successful
version-policy / required (pull_request) Successful in 9s
required-ci / required (pull_request) Successful in 8m12s
fbc6aae756
Add Android age identity provisioning
All checks were successful
version-policy / required (pull_request) Successful in 6s
required-ci / required (pull_request) Successful in 8m0s
9e078f1cd5
Add Android paranoid cache mode
All checks were successful
version-policy / required (pull_request) Successful in 6s
required-ci / required (pull_request) Successful in 7m7s
f0383ad2b3
Persist Android JMAP sync state
All checks were successful
version-policy / required (pull_request) Successful in 6s
required-ci / required (pull_request) Successful in 8m10s
90f902fdbf
Use Email changes for Android incremental sync
All checks were successful
version-policy / required (pull_request) Successful in 5s
required-ci / required (pull_request) Successful in 7m7s
f496074844
Add Android sync interval setting
All checks were successful
version-policy / required (pull_request) Successful in 14s
required-ci / required (pull_request) Successful in 7m32s
65b44eacfb
Stabilize Android mail fetch diagnostics
All checks were successful
version-policy / required (pull_request) Successful in 5s
required-ci / required (pull_request) Successful in 8m4s
af9fadc44e
Refresh Android inbox after mail mutations
All checks were successful
version-policy / required (pull_request) Successful in 5s
required-ci / required (pull_request) Successful in 7m47s
588c65a5f6
ober scheduled this pull request to auto merge when all checks succeed 2026-08-10 10:54:34 -04:00
ober merged commit 88301320f0 into main 2026-08-10 10:56:10 -04:00
ober referenced this pull request from a commit 2026-08-10 10:56:10 -04:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ober/jerboa-jmap!10
No description provided.