diff --git a/src/imap.rs b/src/imap.rs index 760661d8f..4bf3cc240 100644 --- a/src/imap.rs +++ b/src/imap.rs @@ -1775,7 +1775,7 @@ impl Imap { /// Attempts to configure mvbox. /// /// Tries to find any folder in the given list of `folders`. If none is found, tries to create - /// any of them in the same order. This method does not use LIST command to ensure that + /// `folders[0]`. This method does not use LIST command to ensure that /// configuration works even if mailbox lookup is forbidden via Access Control List (see /// ). /// @@ -1804,24 +1804,28 @@ impl Imap { "MVBOX-folder {:?} successfully selected, using it.", &folder ); session.close().await?; + // Before moving emails to the mvbox we need to remember its UIDVALIDITY, otherwise + // emails moved before that wouldn't be fetched but considered "old" instead. + self.select_with_uidvalidity(context, folder).await?; return Ok(Some(folder)); } } - if create_mvbox { - for folder in folders { - match session.create(&folder).await { - Ok(_) => { - info!(context, "MVBOX-folder {} created.", &folder); - return Ok(Some(folder)); - } - Err(err) => { - warn!(context, "Cannot create MVBOX-folder {:?}: {}", &folder, err); - } - } + if !create_mvbox { + return Ok(None); + } + let Some(folder) = folders.first() else { + return Ok(None); + }; + match self.select_with_uidvalidity(context, folder).await { + Ok(_) => { + info!(context, "MVBOX-folder {} created.", folder); + return Ok(Some(folder)); + } + Err(err) => { + warn!(context, "Cannot create MVBOX-folder {:?}: {}", folder, err); } } - Ok(None) }