fix(mail): drop contacts from the EAS bundle — Stalwart 404s empty addressbook homes
ci / changes (push) Successful in 3s
ci / tc_booking (push) Has been skipped
ci / tc_operator (push) Has been skipped
ci / tc_platform_api (push) Has been skipped
ci / test_platform_api (push) Has been skipped
ci / tc_website (push) Successful in 20s
ci / tc_portal (push) Successful in 26s
ci / build_booking (push) Has been skipped
ci / build_operator (push) Has been skipped
ci / build_platform_api (push) Has been skipped
ci / build_zpush (push) Successful in 11s
ci / build_portal (push) Successful in 41s
ci / deploy (push) Successful in 39s

BackendCombined login is all-or-nothing, and Stalwart returns 404 for
/dav/card/<account>/ when the account's default address book was never
created (it doesn't auto-create on the gateway's PROPFIND the way the
calendar home worked) — so CardDAV killed every otherwise-successful
EAS login. Exchange accounts now bundle mail + calendar; contacts stay
on the Apple-profile CardDAV path. Re-enable BackendCardDAV once
platform-api provisions a default address book at mailbox creation.

Copy/docs aligned: portal hint, SERVICES.md, website FAQ (da+en).
This commit is contained in:
Ronni Baslund
2026-06-12 15:31:27 +02:00
parent 9bc89bcd5d
commit fc621cdf81
4 changed files with 23 additions and 15 deletions
+15 -10
View File
@@ -1,10 +1,16 @@
<?php
// dezky replacement for Z-Push's backend/combined/config.php (applied at
// image build, see Dockerfile). One EAS account fans out to three Stalwart
// protocols: mail over IMAP, calendar/tasks over CalDAV, contacts over
// CardDAV. Login succeeds only if every backend authenticates — they all
// hit the same Stalwart account with the same credentials, so that's one
// effective check.
// image build, see Dockerfile). One EAS account fans out to Stalwart over
// IMAP (mail) and CalDAV (calendar/tasks). Login succeeds only if every
// backend authenticates — they all hit the same Stalwart account with the
// same credentials, so that's one effective check.
//
// CardDAV (contacts) is deliberately NOT in the bundle yet: the combined
// login is all-or-nothing, and Stalwart 404s the addressbook home of any
// account whose default address book was never created — which killed every
// EAS login on first deploy. Re-add 'd' => BackendCardDAV once platform-api
// provisions a default address book at mailbox creation. Apple devices get
// contacts via the .mobileconfig CardDAV payload meanwhile.
class BackendCombinedConfig {
@@ -13,7 +19,6 @@ class BackendCombinedConfig {
'backends' => array(
'i' => array('name' => 'BackendIMAP'),
'c' => array('name' => 'BackendCalDAV'),
'd' => array('name' => 'BackendCardDAV'),
),
'delimiter' => '/',
'folderbackend' => array(
@@ -28,10 +33,10 @@ class BackendCombinedConfig {
SYNC_FOLDER_TYPE_USER_APPOINTMENT => 'c',
SYNC_FOLDER_TYPE_TASK => 'c',
SYNC_FOLDER_TYPE_USER_TASK => 'c',
SYNC_FOLDER_TYPE_CONTACT => 'd',
SYNC_FOLDER_TYPE_USER_CONTACT => 'd',
// No notes/journal store in Stalwart — let mail own the rest
// so folder creation never lands on a DAV backend by surprise.
// No contacts/notes/journal on EAS for now — let mail own
// them so folder creation never lands somewhere surprising.
SYNC_FOLDER_TYPE_CONTACT => 'i',
SYNC_FOLDER_TYPE_USER_CONTACT => 'i',
SYNC_FOLDER_TYPE_NOTE => 'i',
SYNC_FOLDER_TYPE_USER_NOTE => 'i',
SYNC_FOLDER_TYPE_JOURNAL => 'i',