Internet Calendars - Failing to show some recurring events from ICS-based calendars

I’ve been exploring converting to eM Client from Outlook as Microsoft continues to push the “new” Outlook, and while I’ve found feature parity in most of the important areas in my first day of testing, I did find what appears to be a significant bug in eM Client’s ICS protocol parsing for internet calendars.

I use a couple of ICS-based calendars for my work, and it appears that recurring events with changes made to individual entries (e.g., a meeting that recurs every Thursday, but has historically had to have some dates moved to a Wednesday or a Friday) often fail to show up in the calendar in eM Client at all (i.e., no recurring event and no sign of the changed event dates). It doesn’t seem to impact all recurring events with changes, so perhaps it requires a certain number of changes to have been made before it trips up, but it’s impacting several events in the calendars I’m testing with, so it’s clearly not just a one-off on a particular event.

I double-checked that using the exact same ICS URL in other clients (like Outlook or Google Calendar) shows the recurring events properly, and I double-checked the raw ICS file to make sure that the events are indeed listed in it.

Has anyone else run into this issue, and, if so, did you find a resolution you can share? Since these are private business calendars, I can’t share the links or files in full in their original state, but if you need any information or details from them to troubleshoot, I could probably create redacted versions of some portions of the files to share.

Bug Report: RECURRENCE-ID exceptions invisible when UID has multiple RRULE masters

Product: eM Client 10.4.5326
Affected feature: Calendar – ICS feed subscription
Severity: High – events silently disappear, no error shown


Summary

When subscribing to an ICS calendar feed where a recurring series has been renewed (same UID, new RRULE master for a new time period) and individual occurrences have been modified via RECURRENCE-ID, most of those modified occurrences are invisible in eM Client. Only the last RECURRENCE-ID event in the feed is shown; all earlier ones disappear silently.

This pattern is common in Microsoft Exchange/OWA exports where a meeting series is recreated each year (e.g. annual planning cycles) while reusing the original UID.

The same feed displays all occurrences correctly in Apple Calendar, Google Calendar, and Thunderbird.


Minimal Reproduction

Host the following ICS at a URL and subscribe to it in eM Client:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Microsoft Corporation//Outlook 16.0 MIMEDIR//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VTIMEZONE
TZID:W. Europe Standard Time
BEGIN:STANDARD
DTSTART:16010101T030000
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:CET
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010101T020000
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZNAME:CEST
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
UID:[email protected]
DTSTART;TZID=W. Europe Standard Time:20250506T100000
DTEND;TZID=W. Europe Standard Time:20250506T110000
RRULE:FREQ=WEEKLY;UNTIL=20251216T090000Z;BYDAY=TU;WKST=MO
SUMMARY:Weekly Team Meeting
X-MICROSOFT-CDO-INSTTYPE:1
END:VEVENT
BEGIN:VEVENT
UID:[email protected]
RECURRENCE-ID;TZID=W. Europe Standard Time:20250930T100000
DTSTART;TZID=W. Europe Standard Time:20250930T100000
DTEND;TZID=W. Europe Standard Time:20250930T110000
SUMMARY:Weekly Team Meeting (special agenda Sep 30)
X-MICROSOFT-CDO-INSTTYPE:3
END:VEVENT
BEGIN:VEVENT
UID:[email protected]
DTSTART;TZID=W. Europe Standard Time:20260106T100000
DTEND;TZID=W. Europe Standard Time:20260106T110000
RRULE:FREQ=WEEKLY;UNTIL=20261215T090000Z;BYDAY=TU;WKST=MO
SUMMARY:Weekly Team Meeting
X-MICROSOFT-CDO-INSTTYPE:1
END:VEVENT
BEGIN:VEVENT
UID:[email protected]
RECURRENCE-ID;TZID=W. Europe Standard Time:20260512T100000
DTSTART;TZID=W. Europe Standard Time:20260512T100000
DTEND;TZID=W. Europe Standard Time:20260512T110000
SUMMARY:Weekly Team Meeting (special agenda May 12)
X-MICROSOFT-CDO-INSTTYPE:3
END:VEVENT
BEGIN:VEVENT
UID:[email protected]
RECURRENCE-ID;TZID=W. Europe Standard Time:20260519T100000
DTSTART;TZID=W. Europe Standard Time:20260519T100000
DTEND;TZID=W. Europe Standard Time:20260519T110000
SUMMARY:Weekly Team Meeting (special agenda May 19)
X-MICROSOFT-CDO-INSTTYPE:3
END:VEVENT
BEGIN:VEVENT
UID:[email protected]
RECURRENCE-ID;TZID=W. Europe Standard Time:20260526T100000
DTSTART;TZID=W. Europe Standard Time:20260526T100000
DTEND;TZID=W. Europe Standard Time:20260526T110000
SUMMARY:Weekly Team Meeting (special agenda May 26)
X-MICROSOFT-CDO-INSTTYPE:3
END:VEVENT
END:VCALENDAR

Quick local test:

# Save the ICS above as repro.ics, then:
python3 -m http.server 8765
# Subscribe in eM Client to: http://localhost:8765/repro.ics

Steps to reproduce

  1. Subscribe to the ICS feed above in eM Client (Calendar → Add calendar → Subscribe from Internet)
  2. Navigate to the weeks of May 12, May 19, and May 26, 2026 (all Tuesdays)

Expected Behavior

All three Tuesdays show their respective modified titles:

  • May 12 → Weekly Team Meeting (special agenda May 12)
  • May 19 → Weekly Team Meeting (special agenda May 19)
  • May 26 → Weekly Team Meeting (special agenda May 26)

This is the behavior defined in RFC 5545 §3.6.1: a VEVENT with RECURRENCE-ID overrides the corresponding occurrence.

Apple Calendar, Google Calendar, and Thunderbird all display all three correctly.


Actual Behavior (eM Client 10.4.5326)

  • May 12 → missing entirely
  • May 19 → missing entirely
  • May 26 → Weekly Team Meeting (special agenda May 26) ✓ (only last RECID shown)

Root Cause Analysis

The bug is triggered by the combination of:

  1. Multiple RRULE masters sharing the same UID – Exchange reuses UIDs when a recurring series is renewed for a new period (e.g. annual cycles). The feed contains two masters: one for 2025 (UNTIL=20251216) and one for 2026 (UNTIL=20261215), both with UID:[email protected].

  2. RECURRENCE-ID exceptions for the second master – Individual occurrences of the 2026 series are modified and appear as RECURRENCE-ID events with X-MICROSOFT-CDO-INSTTYPE:3.

  3. eM Client only shows the last RECURRENCE-ID event – Of three modified occurrences (May 12, 19, 26), only May 26 (the last in document order) is displayed. The others are silently discarded.

A simpler variant without multiple RRULE masters (single master + one RECURRENCE-ID) does not trigger the bug – eM Client handles that case correctly.


Additional Observations

X-MICROSOFT-CDO-INSTTYPE

Microsoft Exchange marks recurring master events with X-MICROSOFT-CDO-INSTTYPE:1 and per-occurrence exceptions with X-MICROSOFT-CDO-INSTTYPE:3. Removing these properties from the feed does not resolve the issue.

Workaround

We built a server-side ICS proxy that expands affected series into explicit individual VEVENT blocks (no RRULE, no RECURRENCE-ID, unique UID per occurrence). With this approach eM Client displays all occurrences correctly.

The proxy is open source: configs/ical-fixer/main.py uses Python/FastAPI with the icalendar and dateutil libraries. Happy to share details if useful for debugging.


Environment

  • Feed source: Microsoft Exchange / Outlook Web Access (OWA) – outlook.office365.com
  • eM Client version: 10.4.5326
  • Verified working in: Apple Calendar (macOS), Google Calendar (web), Thunderbird 128
  • RFC reference: RFC 5545 §3.6.1

Request

Please fix the handling of RECURRENCE-ID exceptions when a UID has multiple RRULE masters (renewed series). All RECURRENCE-ID events should be applied to their respective occurrence, not just the last one in document order.