Skip to content

feat(mail): mail apps find calendars and contacts on their own, so the per-mailbox URL modal is gone — GH #1917 - #1998

Merged
shukiv merged 2 commits into
mainfrom
gh1917-drop-dav-modal
Oct 4, 2026
Merged

shukiv merged 2 commits into
mainfrom
gh1917-drop-dav-modal

Conversation

@shukiv

@shukiv shukiv commented Oct 4, 2026

Copy link
Copy Markdown
Owner

GH #1917 (johnnyq): the "Calendar & contacts" modal is no longer needed. Thunderbird now finds a mailbox's address books during account setup, not only its calendars.

What changes

  • Mailboxes tab: the "Calendar & contacts" row action and its URL modal (MailSyncInfoModal) are removed. Mail apps find calendars and contacts on their own through the domain's _caldavs._tcp / _carddavs._tcp SRV records and the mail host's /.well-known/caldav|carddav.
  • External-DNS record list: with the URLs gone, those two SRV records are the only way in.
    • A panel-hosted zone already publishes them.
    • The mail DNS record list (GET /domains/:id/email), shown to an external-DNS domain under DNS records, left them out. It now lists both, with the same target the zone gets: mail.<domain>:443, or the GH Feature: Overide CalDAV / CardDav Server Address Per Mail Domain #1462 override host and port.
    • The plaintext :80 DAV rows stay off that list.
  • One helper: the override-aware SRV content is now one helper, dnscompile.DAVSecureSRV. Both the DAV override reconciler and the hint list call it, so they cannot drift.
  • Docs:
    • docs/site/user/email.md gets a Calendar and contacts section. It covers apps that discover (Thunderbird, DAVx⁵), iPhone/Mac setup (the .mobileconfig profile has no CalDAV/CardDAV payload), and external DNS. It also drops the stale "not exposed in the panel UI yet" line.
    • docs/site/mail.md is updated to match.

Tests

  • TestDomainEmail_Get_ListsDAVDiscoverySRV covers three cases: built-in DAV, a calendar override with a port, and a contacts override. It also checks that the plaintext SRV is never listed.
  • TestDAVSecureSRV covers the helper.
  • The hint-count assertions go from 14 to 16.
  • The MailboxesTab wiring pin fails if the action or the modal comes back.
  • Falsified: each fix was broken in turn, and its test went red.
    • Dropping the hint rows failed 3 tests.
    • Making the hints ignore the override failed both override cases.
    • Making DAVSecureSRV ignore the port failed TestDAVSecureSRV and the existing TestReconcileDAVOverride_HostPort.
    • Restoring the old MailboxesTab failed the pin.
  • Ran:
    • go test ./internal/api/ ./internal/dnscompile/ ./internal/reconciler/;
    • tsc -b;
    • eslint on MailboxesTab;
    • vitest src/components/mail src/shells/user/mail (52 passed).

https://claude.ai/code/session_0173PcNd4h6NceYPc4FuhvXj

shukiv added 2 commits October 4, 2026 21:16
…e per-mailbox URL modal is gone — GH #1917

Thunderbird now finds a mailbox's address books during account setup, not
only its calendars, so the "Calendar & contacts" row action and its URL
modal no longer earn their place. Mail apps use the domain's _caldavs._tcp
and _carddavs._tcp SRV records and the mail host's /.well-known redirects.

With the URLs gone, those SRV records are the only way in. A panel-hosted
zone already publishes them, but the mail DNS record list shown to an
external-DNS domain left them out. It now lists both, with the same target
the zone gets: mail.<domain>:443, or the GH #1462 override host and port.
The plaintext :80 rows stay off that list.

The override-aware SRV content moves to dnscompile.DAVSecureSRV. The DAV
override reconciler and the hint list both call it, so they cannot drift.

The user email doc gains a Calendar and contacts section, including
iPhone/Mac setup (the .mobileconfig profile has no CalDAV/CardDAV payload).

Claude-Session: https://claude.ai/code/session_0173PcNd4h6NceYPc4FuhvXj
@shukiv
shukiv merged commit 71bcef4 into main Oct 4, 2026
11 checks passed
@shukiv
shukiv deleted the gh1917-drop-dav-modal branch October 4, 2026 18:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant