{"record":{"id":"4127eb17174e3a9d","repo":"jstedfast/MailKit","slug":"only-message-events-may-be-specified-when-selected-or","errorCode":null,"errorMessage":"Only message events may be specified when SELECTED or SELECTED-DELAYED is used.","messagePattern":"Only message events may be specified when SELECTED or SELECTED-DELAYED is used\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"MailKit/Net/Imap/ImapEventGroup.cs","lineNumber":138,"sourceCode":"\t\t\tbool isSelectedFilter = MailboxFilter == ImapMailboxFilter.Selected || MailboxFilter == ImapMailboxFilter.SelectedDelayed;\n\n\t\t\tcommand.Append ('(');\n\t\t\tMailboxFilter.Format (engine, command, args);\n\t\t\tcommand.Append (' ');\n\n\t\t\tif (Events.Count > 0) {\n\t\t\t\tvar haveAnnotationChange = false;\n\t\t\t\tvar haveMessageExpunge = false;\n\t\t\t\tvar haveMessageNew = false;\n\t\t\t\tvar haveFlagChange = false;\n\n\t\t\t\tcommand.Append ('(');\n\n\t\t\t\tfor (int i = 0; i < Events.Count; i++) {\n\t\t\t\t\tvar @event = Events[i];\n\n\t\t\t\t\tif (isSelectedFilter && !@event.IsMessageEvent)\n\t\t\t\t\t\tthrow new InvalidOperationException (\"Only message events may be specified when SELECTED or SELECTED-DELAYED is used.\");\n\n\t\t\t\t\tif (@event is ImapEvent.MessageNew)\n\t\t\t\t\t\thaveMessageNew = true;\n\t\t\t\t\telse if (@event == ImapEvent.MessageExpunge)\n\t\t\t\t\t\thaveMessageExpunge = true;\n\t\t\t\t\telse if (@event == ImapEvent.FlagChange)\n\t\t\t\t\t\thaveFlagChange = true;\n\t\t\t\t\telse if (@event == ImapEvent.AnnotationChange)\n\t\t\t\t\t\thaveAnnotationChange = true;\n\n\t\t\t\t\tif (i > 0)\n\t\t\t\t\t\tcommand.Append (' ');\n\n\t\t\t\t\t@event.Format (engine, command, args, isSelectedFilter);\n\t\t\t\t}\n\t\t\t\tcommand.Append (')');\n\n\t\t\t\t// https://tools.ietf.org/html/rfc5465#section-5","sourceCodeStart":120,"sourceCodeEnd":156,"githubUrl":"https://github.com/jstedfast/MailKit/blob/9d3859a7855e3e17582c07fd01972b8e262bf176/MailKit/Net/Imap/ImapEventGroup.cs#L120-L156","documentation":"ImapEventGroup.Format() validates the NOTIFY event list: when the event group's mailbox filter is SELECTED or SELECTED-DELAYED (RFC 5465), only message events (MessageNew, MessageExpunge) may be included. Including e.g. MailboxEvents or FlagChange-only/metadata events for the selected filter is invalid and throws InvalidOperationException.","triggerScenarios":"Creating an ImapEventGroup with ImapMailboxFilter.Selected (or SelectedDelayed) and adding non-message events like ImapEvent.MailboxName, SubscriptionChange, or MessageExpunge-incompatible events, then calling Notify / AssertFormatEventGroup.","commonSituations":"Misreading RFC 5465 NOTIFY semantics - developers assume all event kinds can be attached to the selected mailbox; porting a generic event-group config that worked with Personal/Selected filter to SELECTED.","solutions":["Only add ImapEvent.MessageNew and ImapEvent.MessageExpunge (message events) when MailboxFilter is Selected/SelectedDelayed","Move non-message events into a separate ImapEventGroup with MailboxFilter set to Personal or Subscribed","Assert-validate the group before use via ImapClient's AssertFormatEventGroup path in a unit test"],"exampleFix":"// before\nvar group = new ImapEventGroup(ImapMailboxFilter.Selected) {\n    Events = { ImapEvent.MessageNew, ImapEvent.MailboxName }\n};\n\n// after\nvar selected = new ImapEventGroup(ImapMailboxFilter.Selected) {\n    Events = { ImapEvent.MessageNew, ImapEvent.MessageExpunge }\n};\nvar personal = new ImapEventGroup(ImapMailboxFilter.Personal) {\n    Events = { ImapEvent.MailboxName }\n};","handlingStrategy":"validation","validationCode":"bool IsValidSelectedGroup(ImapEventGroup g) =>\n    (g.MailboxFilter != ImapMailboxFilter.Selected && g.MailboxFilter != ImapMailboxFilter.SelectedDelayed)\n    || g.Events.All(e => e == ImapEvent.MessageNew || e == ImapEvent.MessageExpunge);","typeGuard":"null","tryCatchPattern":"try {\n    client.Notify(eventGroups);\n} catch (InvalidOperationException ex) when (ex.Message.Contains(\"Only message events\")) {\n    // rebuild group with only message events\n}","preventionTips":["Keep SELECTED groups limited to MessageNew/MessageExpunge","Put non-message events in separate Personal/Subscribed groups","Unit-test event group composition against RFC 5465 rules"],"tags":["imap","notify","rfc5465","validation"],"backgroundTag":"invalid-enum-value","analyzedSha":"9d3859a7855e3e17582c07fd01972b8e262bf176","analyzedAt":"2026-09-15T15:46:11.592Z","contentChangedAt":"2026-09-15T15:46:11.592Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}