Most entries here describe client bugs, protocol limitations, or deployment misconfiguration -- not Horde application defects. When in doubt, enable per-device ActiveSync logging and check the web server access log before assuming a server bug.
See also ActiveSync (setup, Autodiscover, troubleshooting) and ActiveSync Feature Grid (what Horde supports by EAS version).
These are the most common operator issues mistaken for Horde bugs.
Autodiscover is keyed off the email domain (user@example.com -> example.com), not necessarily the hostname where Horde lives (mail.example.com). If autodiscover.example.com or example.com points at a vhost without rpc.php routing, the client receives 404 and setup fails.
Other frequent causes:
/Autodiscover/Autodiscover.xml (lowercase d in the middle). Rules must use [NC] or equivalent./horde/rpc.php that does not exist in that docroot, which blocks RedirectMatch rules that should send traffic to the real Horde host.GET .../autodiscover.json/...) -- a 404 here is normal; clients fall back to v1 XML. v1 must return 401 without credentials when routing is correct.See the Autodiscover section on ActiveSync and verify with curl (401 on POST .../autodiscover.xml = routing OK).
Not all devices support Autodiscover; some send broken requests (e.g. older Android builds passing the full email address as the HTTP Basic username without XML body). Horde works around several of these where possible. If Autodiscover still fails, configure the account manually -- usually only the server hostname and credentials beyond the email address.
This appears in the Horde log when a client re-sends a request with a SyncKey the server has already advanced. The client either never received the prior response or rejected it. The library removes the stale state and retries.
If this is occasional and sync works, it is normal. Frequent repetition usually means network problems, proxy timeouts, or a buggy client stuck in a loop -- check reverse-proxy Ping timeouts and per-device logs.
Outlook 2013 over EAS may show This folder hasn't yet been updated, connection attempt even when sync is fine. Often caused by the Outlook Mail Notifier add-in (OutlookChangeNotifierAddIn.dll from Apple Mobile Device Support). Disabling that add-in resolves it.
Some clients enter a loop when provisioning is required but mishandle policy key updates (historically certain iOS 4.3 builds). If a device cannot complete setup when provisioning is Force, try Allow or None for testing, or use per-user permissions to exempt the account.
Broken clients that ignore server state resets may loop until the server escalates to KEYMISMATCH or errors. Horde 6 includes guards for some loop types (e.g. FOLDERSYNC_REQUIRED spam); persistent loops are still ultimately a client or provisioning issue -- remove device state in admin UI and re-pair after fixing the underlying cause.
If you are on an older Horde release, these may still bite you; on Horde 6 / ActiveSync 3.x they are largely addressed:
| Symptom | Horde 6 change |
|---|---|
| iOS mail Ping loops / duplicate mail sync | PING watermark separated from SYNC modseq |
| Endless FolderSync / status 12 loops | FOLDERSYNC_REQUIRED loop guard in sync cache |
| Corrupt device state / mysterious KEYMISMATCH | Corrupt sync_data rejected and repaired; SQL/Mongo row locks |
| iOS Notes multiplexing oddities | Modern iOS Notes collection behaviour updated |
| Recurring calendar exceptions on newer clients | EAS **16.0** instance model when client negotiates >= 16.0 |
Clients stuck on EAS 14.x or below do not benefit from the calendar instance improvements.
Large messages may show This message was downloaded as plain text with a broken «download full message» action. This is an iOS client limitation. Opening attachments individually usually works.
iOS may try to move messages to a local Trash folder instead of issuing a server move. If no Trash folder is configured on the device, delete fails. Configure IMP to use a Trash mailbox and ensure the device syncs that folder.
Some clients prepend their own «On ... wrote:» line while ActiveSync Smart Reply also includes quoted history, producing duplicates. Client-side behaviour; not harmful to data on the server.
Some Android builds send the email address as the HTTP username without a valid Autodiscover XML body. Horde attempts workarounds; manual account setup may still be required.
BINARY extensionActiveSync mail sync may fail against Cyrus IMAP 2.4.x before 2.4.17 due to a BINARY extension bug (Cyrus #3718). Workaround in IMP backend config:
$servers['advanced']['capability_ignore'] = ['BINARY'];
EAS does not support «every X years on day N of the year» (1-365/366). Only same calendar date yearly, or nth-weekday-of-month patterns, are defined. Horde maps unsupported patterns to «once every X years» without correct day-of-year placement.
Historically iOS 6.x-7.x mishandled exceptions (using internal GUIDs, corrupting series). Modern iOS negotiating EAS 16.0+ with Horde 6 uses the instance model and is greatly improved, but edge cases remain -- especially on series with many exceptions or cross-timezone all-day events. See Apple and Microsoft discussions: Apple thread, MS KB 2563324.
iOS may sync a truncated calendar body and later send that truncated text back on edit, overwriting the full description on the server. EAS 16.0 defines ItemOperations fetches for calendar bodies, but clients must request them -- iOS has not reliably done so as of recent testing. Avoid editing long descriptions on device when truncation is suspected.
EAS 16.1 propose-new-time (METHOD=COUNTER) requires clients that negotiate >= 16.1. Older clients only support accept/decline/tentative without counter proposals.
Some iOS versions send an empty Picture element when a contact is edited, clearing the photo in Turba. Reported around iOS 6-9; behaviour has regressed in some later versions. Workaround: re-add photo from the web UI or avoid editing photo-bearing contacts on device.
Horde skips picture updates when iOS sends no Picture tag and the client does not advertise incremental contact updates (ghosted support).
ActiveSync does not standardise the time-of-day for birthday fields. Clients send midnight UTC, local midnight, or other variants. Horde adjusts by detected client where possible (Horde_ActiveSync_Device birthday handling); mismatches can still appear on uncommon clients or after iOS/Android updates.
Regenerate=1 not supportedOutlook may send Regenerate=1 on recurring tasks (regenerate next instance after completion). Horde/Nag use completions[] and fixed RRULE semantics -- regenerated due dates are not implemented. Completed instances sync; regenerated series behaviour on Outlook may diverge.
| Topic | Status |
|---|---|
| SMS sync | Stubbed -- prevents broken clients from breaking mail |
| Conversation view / segments | Not implemented |
| Nickname cache | Not implemented |
ItemOperations:Schema |
Ignored -- no known client requires it |
HTTP 503 / X-MS-Throttle |
Not implemented |
These affected old clients and are listed for archive searches only. Current iOS/Android versions are unlikely to hit them:
ghosted announcement.When reporting a new issue, include EAS protocol version (MS-ASProtocolVersion), device type, per-device log excerpt, and whether Autodiscover or manual setup was used.