{"record":{"id":"ebb5b032678a2455","repo":"jstedfast/MailKit","slug":"the-imapfolder-does-not-support-mod-sequences-ebb5b0","errorCode":null,"errorMessage":"The ImapFolder does not support mod-sequences.","messagePattern":"The ImapFolder does not support mod-sequences\\.","errorType":"exception","errorClass":"NotSupportedException","httpStatus":null,"severity":"error","filePath":"MailKit/Net/Imap/ImapFolderFlags.cs","lineNumber":88,"sourceCode":"\t\t\t\t\t\tunmodified[i] = (int) (rc.UidSet[i].Id - 1);\n\n\t\t\t\t\treturn unmodified;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn Array.Empty<int> ();\n\t\t}\n\n\t\tIEnumerable<ImapCommand> QueueStoreCommands (IList<UniqueId> uids, IStoreFlagsRequest request, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (uids == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (uids));\n\n\t\t\tif (request == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (request));\n\n\t\t\tif (request.UnchangedSince.HasValue && !supportsModSeq)\n\t\t\t\tthrow new NotSupportedException (\"The ImapFolder does not support mod-sequences.\");\n\n\t\t\tCheckState (true, true);\n\n\t\t\tif (uids.Count == 0)\n\t\t\t\treturn Array.Empty<ImapCommand> ();\n\n\t\t\tint numKeywords = request.Keywords != null ? request.Keywords.Count : 0;\n\t\t\tstring action;\n\n\t\t\tswitch (request.Action) {\n\t\t\tcase StoreAction.Add:\n\t\t\t\tif ((request.Flags & SettableFlags) == 0 && numKeywords == 0)\n\t\t\t\t\treturn Array.Empty<ImapCommand> ();\n\n\t\t\t\taction = request.Silent ? \"+FLAGS.SILENT\" : \"+FLAGS\";\n\t\t\t\tbreak;\n\t\t\tcase StoreAction.Remove:\n\t\t\t\tif ((request.Flags & SettableFlags) == 0 && numKeywords == 0)","sourceCodeStart":70,"sourceCodeEnd":106,"githubUrl":"https://github.com/jstedfast/MailKit/blob/9d3859a7855e3e17582c07fd01972b8e262bf176/MailKit/Net/Imap/ImapFolderFlags.cs#L70-L106","documentation":"QueueStoreCommands throws NotSupportedException when a Store request specifies UnchangedSince (CONDSTORE conditional STORE) but the folder does not support mod-sequences. CONDTSTORE requires the server to advertise CONDSTORE (or QRESYNC) and the folder to have mod-sequence state; MailKit refuses the operation rather than silently ignoring UnchangedSince.","triggerScenarios":"Calling ImapFolder.Store(uids, request, ...) or StoreAsync with a StoreFlagsRequest/StoreLabelsRequest whose UnchangedSince is set, on a folder/server without CONDSTORE support (ImapClient.Capabilities lacks Condstore/Qresync), or before the folder established mod-sequence state.","commonSituations":"Code written against CONDSTORE-capable servers (Cyrus, Dovecot, Gmail) run against servers without it; setting UnchangedSince unconditionally without checking capabilities; capability checks performed on a different client/connection instance.","solutions":["Check (imapClient.Capabilities & ImapCapabilities.Condstore) != 0 (or Qresync) before setting UnchangedSince; omit it when unsupported.","Recreate the request without UnchangedSince: new StoreFlagsRequest(StoreAction.Set, MessageFlags.Seen).","Enable CONDSTORE (e.g. issue a mod-sequence FETCH or folder.EnableQiResync) if the server supports it, then retry.","If optimistic concurrency is required, use a CONDSTORE-capable server or implement retry-on-conflict at the application level."],"exampleFix":"// before\nvar request = new StoreFlagsRequest(StoreAction.Add, MessageFlags.Seen) { UnchangedSince = modSeq };\nawait folder.StoreAsync(uids, request);\n// after\nif ((client.Capabilities & ImapCapabilities.Condstore) != 0) {\n    var request = new StoreFlagsRequest(StoreAction.Add, MessageFlags.Seen) { UnchangedSince = modSeq };\n    await folder.StoreAsync(uids, request);\n} else {\n    await folder.StoreAsync(uids, new StoreFlagsRequest(StoreAction.Add, MessageFlags.Seen));\n}","handlingStrategy":"fallback","validationCode":"bool canCondstore = (client.Capabilities & ImapCapabilities.Condstore) != 0\n                 || (client.Capabilities & ImapCapabilities.Qresync) != 0;\nvar request = canCondstore\n    ? new StoreFlagsRequest(StoreAction.Add, MessageFlags.Seen) { UnchangedSince = modSeq }\n    : new StoreFlagsRequest(StoreAction.Add, MessageFlags.Seen);\nawait folder.StoreAsync(uids, request);","typeGuard":null,"tryCatchPattern":"try {\n    await folder.StoreAsync(uids, requestWithUnchangedSince);\n} catch (NotSupportedException) {\n    await folder.StoreAsync(uids, requestWithoutUnchangedSince);\n}","preventionTips":["Check ImapCapabilities.Condstore before using UnchangedSince.","Detect server features at connect time and keep a feature matrix.","Fall back to unconditional Store plus post-read verification.","For conflict detection, prefer CONDSTORE-capable servers (Dovecot, Cyrus, Gmail)."],"tags":["imap","mailkit","condstore","mod-sequence","not-supported"],"backgroundTag":"unsupported-operation","analyzedSha":"9d3859a7855e3e17582c07fd01972b8e262bf176","analyzedAt":"2026-09-15T15:46:11.592Z","contentChangedAt":"2026-09-15T15:46:11.592Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}