Improve APPEND results and safely expunge specific messages - #181
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
IMAP servers can successfully append a message without returning APPENDUID when UIDPLUS is unavailable. The current append API assumes that response is always present and returns only an integer UID, which prevents callers from handling a successful append without identifiers. It also does not allow the optional APPEND internal date to be supplied.
Deleting a specific message with expunge enabled currently follows the flag update with a mailbox-wide EXPUNGE. That can permanently remove other messages which were already marked as deleted by another client.
This introduces an AppendResult containing nullable UID validity and UID values, adds optional internal-date support to APPEND, and allows expunge operations to target exact UIDs through UID EXPUNGE. Message and query deletion now use their known UIDs, while MOVE no longer performs a redundant mailbox-wide expunge after the server has already removed the source messages.
This targets v2.0 because changing append from an integer or tagged response to AppendResult is a breaking API change.