Accepting calendar invite should change event RSVP status

The Problem

Take an event invite that is sent to my GMail Account that I manage in Mailspring. Accepting an invite via Mailspring does not change the event status in the connected Google Calendar:

Mailspring:
Mailspring_Event

Google Calendar:
Google_Calendar_1

Proposed Solution

When accepting the event in Mailspring, this should automatically set the event status to accepted in the Google Calendar that is connected to the GMail account.

Google_Calendar_2

Context

I am not sure if this is something that should be working already in the current implementation, or if this is something to be tackled in combination with the general Calendar Feature in Mailspring (if it may not yet be possible easily).

The calendar invite that I got where I noticed the issue produced the following error in the Developer Console. Not sure if it is related or just a display error:

/home/phylu/git/Mailspring/app/node_modules/moment-timezone/moment-timezone.js:484 Moment Timezone has no data for W. Europe Standard Time. See http://momentjs.com/timezone/docs/#/data-loading/.
logError @ /home/phylu/git/Mailspring/app/node_modules/moment-timezone/moment-timezone.js:484
fn.tz @ /home/phylu/git/Mailspring/app/node_modules/moment-timezone/moment-timezone.js:571
tz @ /home/phylu/git/Mailspring/app/node_modules/moment-timezone/moment-timezone.js:502
render @ event-header.tsx:107
finishClassComponent @ /home/phylu/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:13727
updateClassComponent @ /home/phylu/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:13690
beginWork @ /home/phylu/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:14489
performUnitOfWork @ /home/phylu/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:17014
workLoop @ /home/phylu/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:17054
renderRoot @ /home/phylu/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:17133
performWorkOnRoot @ /home/phylu/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:17993
performWork @ /home/phylu/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:17901
performSyncWork @ /home/phylu/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:17873
requestWork @ /home/phylu/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:17761
scheduleWork @ /home/phylu/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:17566
enqueueSetState @ /home/phylu/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:11695
Component.setState @ /home/phylu/git/Mailspring/app/node_modules/react/cjs/react.development.js:373
fs_1.default.readFile @ event-header.tsx:74
readFileAfterClose @ internal/fs/read_file_context.js:53

I have this same problem with my Outlook email and calendar.

This seems to be caused by the following issue which I just saw by accident right now: Bug: When responding to calendar invites in gmail, it returns "undefined" · Issue #2128 · Foundry376/Mailspring · GitHub
→ Moved to Bug section.
→ I will try to tackle this soon.

I have debugged the issue. Unfortunately, this seems to require an update in the Mailsync Engine @bengotow.

When accepting or declining an invitation, the RSVP is correctly sent to the Mailsync Engine:

mailsync-process.ts:312 Sending to mailsync ea589672 {type: "queue-task", task: EventRSVPTask}task: EventRSVPTask {accountId: "ea589672", ics: "BEGIN:VCALENDAR
↵PRODID:-//Google Inc//Google Cale… Termin
↵TRANSP:OPAQUE
↵END:VEVENT
↵END:VCALENDAR", icsRSVPStatus: "DECLINED", to: "XXX", subject: "Declined: Test Termin", …}accountId: "ea589672"ics: "BEGIN:VCALENDAR
↵...
↵END:VCALENDAR"icsRSVPStatus: "DECLINED"id: "local-8c1e7893-94a7"messageId: "NoRaZeXCRryZze8BEZYLzA2TNvsNiEvCcJzjQ8dCz"origin: "    at EventEmitter.eventHandler (/home/janosch/git/Mailspring/app/node_modules/reflux/src/PublisherMethods.js:36:22)↵    at EventEmitter.emit (/home/janosch/git/Mailspring/app/node_modules/eventemitter3/index.js:93:33)↵    at Function.trigger (/home/janosch/git/Mailspring/app/node_modules/reflux/src/PublisherMethods.js:52:26)↵    at Object.functor [as queueTask] (/home/janosch/git/Mailspring/app/node_modules/reflux/src/createAction.js:32:56)↵    at EventHeader._onRSVP (file:///home/janosch/git/Mailspring/app/internal_packages/events/lib/event-header.tsx:247:13)↵    at onClick (file:///home/janosch/git/Mailspring/app/internal_packages/events/lib/event-header.tsx:214:33)↵    at HTMLUnknownElement.callCallback (/home/janosch/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:149:14)↵    at Object.invokeGuardedCallbackDev (/home/janosch/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:199:16)↵    at invokeGuardedCallback (/home/janosch/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:256:31)↵    at invokeGuardedCallbackAndCatchFirstError (/home/janosch/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:270:25)↵    at executeDispatch (/home/janosch/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:601:3)↵    at executeDispatchesInOrder (/home/janosch/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:623:5)↵    at executeDispatchesAndRelease (/home/janosch/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:721:5)↵    at executeDispatchesAndReleaseTopLevel (/home/janosch/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:732:10)↵    at forEachAccumulated (/home/janosch/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:702:8)↵    at runEventsInBatch (/home/janosch/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:863:5)↵    at runExtractedEventsInBatch (/home/janosch/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:872:3)↵    at handleTopLevel (/home/janosch/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:4860:5)↵    at batchedUpdates$1 (/home/janosch/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:18104:12)↵    at batchedUpdates (/home/janosch/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:2198:12)↵    at dispatchEvent (/home/janosch/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:4939:5)↵    at interactiveUpdates$1 (/home/janosch/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:18159:12)↵    at interactiveUpdates (/home/janosch/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:2217:10)↵    at dispatchInteractiveEvent (/home/janosch/git/Mailspring/app/node_modules/react-dom/cjs/react-dom.development.js:4916:3)"status: "local"subject: "Declined: Test Termin"to: "XXXX"__proto__: Tasktype: "queue-task"__proto__: Object

The Mailsync Engine handles the RSVP:

87019 [2021-01-13 22:03:54.809] [foreground] [info] Idle exited with code 0
87019 [2021-01-13 22:03:54.811] [foreground] [info] [local-8c1e7893-94a7] Running EventRSVPTask performRemote:
87019 [2021-01-13 22:03:54.811] [foreground] [info] -- Sending RSVP to organizer XXXX
87019 [2021-01-13 22:03:56.175] [metadataExpiration] [info] Scanning for expired metadata
87019 [2021-01-13 22:03:56.175] [metadataExpiration] [info] -- Will wake for next expiration in 7200sec
87019 [2021-01-13 22:03:56.229] [foreground] [info] [local-8c1e7893-94a7] -- Succeeded. Changing status to `complete`
87019 [2021-01-13 22:03:56.373] [foreground] [info] syncFolderChangesViaCondstore - [Gmail]/Alle Nachrichten: modseq 206645 to 206661, uidnext 1089 to 1090
87019 [2021-01-13 22:03:56.513] [foreground] [info] syncFolderChangesViaCondstore - Changes since HMODSEQ 206645: 1 changed, 0 vanished
87019 [2021-01-13 22:03:56.764] [main] [info] [local-e91dc488-6822] Running SyncbackMetadataTask performLocal:
87019 [2021-01-13 22:03:56.769] [main] [info] [local-e91dc488-6822] -- Succeeded. Changing status to `remote`
87019 [2021-01-13 22:03:56.848] [foreground] [info] Idling on folder [Gmail]/Alle Nachrichten
87019 [2021-01-13 22:03:57.193] [foreground] [info] Idle exited with code 0
87019 [2021-01-13 22:03:57.194] [foreground] [info] [local-e91dc488-6822] Running SyncbackMetadataTask performRemote:
87019 [2021-01-13 22:03:57.630] [foreground] [info] Syncback of metadata NoRaZeXCRryZze8BEZYLzA2TNvsNiEvCcJzjQ8dCz:event-rsvp = {"headerMessageId":"000000000000fd9b2f05b8cca088@google.com","objectType":"message","value":{"status":"DECLINED","time":1610571836761},"version":2} succeeded.
87019 [2021-01-13 22:03:57.630] [foreground] [info] [local-e91dc488-6822] -- Succeeded. Changing status to `complete`
87019 [2021-01-13 22:03:57.640] [metadata] [info] Received metadata V2 for (message - NoRaZeXCRryZze8BEZYLzA2TNvsNiEvCcJzjQ8dCz)

An e-mail that includes the response is sent out. The attached .ics file contains the information for the invitee that it was accepted/declined. However, this seems not to be parsed correctly by the event organizers calendar system. I have compared the ical files that I can see after accepting an invite via Mailspring and Apple Calendar. The following lines from the Mailspring .ics file are not in the Apple Mail .ics file:

  • ATTENDEE – An Attendee which contains the (accepted) RSVP of the organizer of the event
  • X-MICROSOFT-CDO-WONERAPPTID
  • DESCRIPTION – This line exists in the mail via Apple calendar, but is empty, whereas it contains a description (from Google Calendar) in the Mailspring case.

When a calendar response that is sent from Mailspring is opened in Mailspring, the behaviour is also strange. RSVP is displayed as undefined. Here the calendar response is interpreted twice and in the first “parsing”, the response is understood correctly, but in the second parsing (no idea, why this happens), the response is set to NEEDS-ACTION, which evaluates to undefined in line 187 of event-header.tsx:
calendar_invite

1 Like

Description

Clicking on the RSVP action in an e-mail invitation has no real effect, apart from the visual change of the status in the invitation e-mail. That is, if I click “Accept”, I see the “Accept” button turning green, but in the actual calendar event, there is no reply. This happens with Microsoft Teams invitations sent to my Microsoft O365 account.

To Reproduce…

Get an invitation to an MS Teams event (or to any other Microsoft O365 shared calendar event), click on the RSVP inside the e-mail invitation and check whether the reply is synched with the actual event.
(PS: I could only attach one screenshot)

Expected Behavior

The RSVP reply should be synched with the calendar shown in Teams/Outlook

Screenshots

image

Setup

  • OS and Version: Ubuntu Linux 18.04 LTS
  • Installation Method: snap
  • Mailspring Version: 1.9.1

I’d wondered about this. While there’s no calendar feature in Mailspring, it’s arguable whether Mailspring should offer to respond to invitations at all (that’s the calendar app’s job IMO). Certainly, though, it should do something if you click the button!

Is that an MSTeams event or a Google Calendar event?

It is an MS Teams invitation

Now that the Mailspring-Sync is open source, I was able to have a look there. On a short inspection (see [1]) everything looks fine. The message that is sent out just takes the ics from the frontend code and sends it to the organizer.

If anyone here has some experience, how those ics responses are handled or point me in the correct direction of what may be the problem, I will give it (another) shot to solve it.

[1]