[commits] [Wiki] changed: ActiveSync/KnownIssues
Wiki
wikiguest at horde.org
Thu Jun 25 08:04:12 UTC 2026
tdannhauer Thu, 25 Jun 2026 08:04:12 +0000
Modified page: https://wiki.horde.org/ActiveSync/KnownIssues
New Revision: 25
Change log: H6 Update
@@ -3,85 +3,141 @@
-The following issues are mostly due to buggy clients and/or variable
implementation details between clients. In most cases there is nothing
Horde can due to work around these issues.
+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.
-## General issues
-### Autodiscovery fails.
+See also [ActiveSync](ActiveSync) \(setup, Autodiscover,
troubleshooting\) and [ActiveSync Feature
Grid](ActiveSync/FeatureGrid) \(what Horde supports by EAS version\).
+## Deployment and Autodiscover
-To start with, not all devices support this. Of those that claim to,
some do not implement it correctly. For example, Android clients send
broken Autodiscover requests where they pass the full email address as
the username in the HTTP Authorization data, and don't even bother
with sending the XML request. We work around these issues where we
can, but simply cannot work around every single possible device issue.
If Autodiscover fails, you simply have to configure the client
manually - usually not more than an additional one or two fields.
+These are the most common **operator** issues mistaken for Horde bugs.
-### NOTICE posted in horde log like "Previous request processing for
synckey \{552f7b9a-9d50-4f65-9a60-6bed0a011487\}2 failed to be
accepted by the client, removing previous state and trying again.".
+### Autodiscover fails despite Horde working on the mail host
+Autodiscover is keyed off the **email domain** \(`user at 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.
-This occurs whenever the ActiveSync client issues a request, the
server processes, but the client either never receives the response,
or receives a response that it does not understand. The client then
reissues the request \(along with the same SyncKey\). Since the server
already processed the request for the specified SyncKey, it leads to a
duplicate PRIMARY key error. Since this is expected from time to time,
the ActiveSync library deletes the sync state tied to the key causing
the error and tries again. If this happens too many times in a row,
the client will usually throttle the connection and notify the user.
+Other frequent causes:
-Bottom line, if you do not see any this often, and you notice no
issues with synchronization, this is normal and nothing to worry about.
+- Rewrite rules are **case-sensitive** -- iOS sends
`/Autodiscover/Autodiscover.xml` \(lowercase **d** in the middle\).
Rules must use `[NC]` or equivalent.
+- A non-Horde vhost includes ActiveSync rewrites to `/horde/rpc.php`
that does not exist in that docroot, which blocks `RedirectMatch`
rules that should send traffic to the real Horde host.
+- Missing routing for **Autodiscover v2 JSON** \(`GET
.../autodiscover.json/...`\) -- a **404** here is normal; clients fall
back to v1 XML. v1 must return **401** without credentials when
routing is correct.
-### Permanent message "This folder hasn't yet been updated"
+See the *Autodiscover* section on [ActiveSync](ActiveSync) and verify
with `curl` \(401 on `POST .../autodiscover.xml` = routing OK\).
+### Autodiscover not supported or implemented incorrectly on the client
-Outlook 2013 with EAS \(OL2013\) shows the permanent message "This
folder hasn't yet been updated, connection attempt" even if the folder
synchronization is 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.
-The problem occurs when the "Outlook Mail Notifier" addin
\(c:\\Program Files\\Common Files\\Apple\\Mobile Device
Support\\OutlookChangeNotifierAddIn.dll\) is enabled.
-Disabling this addin in OL2013 will solve the problem.
+## General synchronization
-### iOS 6 Push fails.
+### NOTICE: «Previous request processing for synckey ... failed to be
accepted by the client»
+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.
-Push email may fail completely in iOS6, requiring manual email
checking. There are also issues with meeting requests and responses
that can cause incorrect response/cancellation emails to be sent out.
+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.
-## Mail related issues
-### iOS Mail: Certain messages always display *This message was
downloaded as plaintext*.
+### Outlook 2013: «This folder hasn't yet been updated»
+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.
-Messages that are over a certain size will always display the This
message was downloaded as plain text message along with a button to
download the message. Attempting to download the message results in an
error displaying the email. This is an issue \(feature?\) with iOS.
Viewing the attachments by clicking the download link for each
attachment works as expected.
+### Provisioning loops
-### Cannot delete email on iOS devices.
+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.
+### Client throttle after repeated KEYMISMATCH / state resets
-iOS devices attempt to move the email to the Trash folder on the
client side instead of sending a move command to the server as the
protocol dictates. This means that if there is no configured Trash
folder on the device, the deletion will fail. If using iOS, you MUST
have IMP configured to use move messages to a Trash folder on deletion.
+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.
-### There is an extra citation line when replying to email.
+## Improved in Horde 6 \(may no longer apply\)
+If you are on an older Horde release, these may still bite you; on
**Horde 6 / ActiveSync 3.x** they are largely addressed:
-Some ActiveSync clients automatically append the citation line to
outgoing reply text. Due to this, and the way *Smart Reply* works in
ActiveSync this can lead to duplicate citation lines when replying to
email on these clients.
+| 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 |
-### Broken IMAP servers.
+Clients stuck on EAS 14.x or below do not benefit from the calendar
instance improvements.
+## Mail
-ActiveSync will NOT work with the following IMAP servers due to bugs
in the specified versions:
+### iOS Mail: «This message was downloaded as plaintext»
-Cyrus IMAP 2.4.x \< 2.4.17 - Due to a bug in the BINARY extension.
See https://bugzilla.cyrusimap.org/show\_bug.cgi?id=3718. Workaround:
disable BINARY extension in IMP's backend configuration, e.g.:
`$servers['advanced']['capability_ignore'] = array('BINARY');`.
+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.
-## Calendar related issues
-### Yearly recurrence by day-of-year recurrences do not honor leap years.
+### Cannot delete mail on iOS
+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.
-Events that recur every X years, on the same day-of-year - the number
of days into the year 1 - 365 \(or 366 on leap years\) are NOT
supported in the [ActiveSync](ActiveSync) protocol. The only yearly
recurring events that are supported are events that recur on the same
date every year, or occur on the same week-of-month/dayof-week
combination \(e.g., 3rd Saturday of March\). Prior to
Horde\_ActiveSync 2.30.6 these events would appear on every day of the
year in the client's calendar. This was fixed in 2.30.6 to show them
only once every X years - but not necessarily on the correct
day-of-year.
+### Duplicate citation lines in replies
-### iOS recurring event exceptions.
+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.
+### Broken Autodiscover auth on some Android clients
-iOS 6.x through 7.x has major issues dealing with creating event
exceptions on the device. Mostly due to using the internal GUID as the
server id. Creating any exceptions on the device could completely
replace/remove the original recurrence series. Syncing certain server
changes to recurrence series can also cause the series to become
corrupt on the device. See:
+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.
-https://discussions.apple.com/thread/4736007
-http://support.microsoft.com/kb/2563324
+### Cyrus IMAP `BINARY` extension
-### Truncated event descriptions.
+ActiveSync mail sync may fail against **Cyrus IMAP 2.4.x before
2.4.17** due to a BINARY extension bug \([Cyrus
#3718](https://bugzilla.cyrusimap.org/show_bug.cgi?id=3718)\).
Workaround in IMP backend config:
+```php
+$servers['advanced']['capability_ignore'] = ['BINARY'];
+```
-iOS requests truncated event description body content. However, iOS
never requests the remaining body content before allowing the event to
be edited. Therefore, when editing such an event, it's the
**truncated** text of the description that is sent back to the server,
overwriting the full description text. EAS 16.0 is was supposed to
help prevent this by allowing ITEMOPERATION requests on calendar data,
but as of yet, this part is not implemented in iOS' EAS 16.0 support.
+## Calendar
-## Address Book related issues
-### iOS Contacts: Editing a contact may cause the contact image to be
removed from Horde/Turba.
+### Yearly recurrence by day-of-year
+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.
-In certain versions of iOS if a contact is edited on the iOS device,
iOS may send an empty Picture element back to the server, thus causing
the picture to be removed. There is no workaround for this other than
updating to a more recent version of iOS. This was verified to have
started sometime after 6.1.3 and to have been resolved to sometime
before, or on, 8.1.3.
+### Recurring event exceptions on iOS
-Update: Looks like this was broken again sometime around iOS 9.3.1.
See Ticket: 14361.
+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](https://discussions.apple.com/thread/4736007), [MS KB
2563324](https://support.microsoft.com/kb/2563324).
-iOS 4.2.1 behaves different: When a contact is edited, no Picture
element is included if the picture is left unchanged. Since the device
never announced it does incremental updates to contacts \("ghosted"
elements\), we must delete the contact picture on the server side.
+### Truncated event descriptions on iOS
-### Birthdays displaying offset by a certain number of days.
+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.
+### Meeting invitations and COUNTER proposals
+
+EAS **16.1** propose-new-time \(`METHOD=COUNTER`\) requires clients
that negotiate >= 16.1. Older clients only support
accept/decline/tentative without counter proposals.
+
+## Contacts
+
+### Contact photo removed after edit on iOS
+
+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\).
+
+### Birthdays offset by one or more days
+
+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.
+
+## Tasks
+
+### Outlook `Regenerate=1` not supported
+
+Outlook 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.
+
+## Protocol / server limitations \(not client bugs\)
+
+| 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 |
+
+## Historical client issues \(legacy reference\)
+
+These affected **old** clients and are listed for archive searches
only. Current iOS/Android versions are unlikely to hit them:
+
+- **iOS 6 push mail** -- push failed; meeting response bugs \(fixed
in iOS 6.0.1+ for many cases\).
+- **iOS 4.2.1 contacts** -- picture handling without `ghosted` announcement.
+- **Windows Mobile / Android 2.x** -- see removed device matrix on
[ActiveSync](ActiveSync); not tested on Horde 6.
+
+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.
-This is a known issue with most ActiveSync clients. It's due to the
fact that the specification does not indicate a standard time to
represent birthdays at during the day. As a result, clients represent
the birthday field in a number of different ways. Recent versions of
Horde\_ActiveSync attempt to detect the client in use and adjust the
time accordingly, but there are still likely clients out there that
this is broken on.
More information about the commits
mailing list