diff --git a/src/plugins/imapsieve/imap-sieve-storage.c b/src/plugins/imapsieve/imap-sieve-storage.c
index 0d5aee5336d6caec2224b381a0e0cf59d32baeca..5954b25e3f3161d0951dd505d96705290cd4b27b 100644
--- a/src/plugins/imapsieve/imap-sieve-storage.c
+++ b/src/plugins/imapsieve/imap-sieve-storage.c
@@ -595,13 +595,6 @@ imap_sieve_mailbox_transaction_run(
 			(user, isuser->client->lda_set);
 	}
 
-	/* Get synchronized view on the mailbox */
-	sbox = mailbox_alloc(box->list, box->vname, 0);
-	if (mailbox_sync(sbox, 0) < 0) {
-		mailbox_free(&sbox);
-		return -1;
-	}
-
 	can_discard = FALSE;
 	switch (isuser->cur_cmd) {
 	case IMAP_SIEVE_CMD_APPEND:
@@ -655,10 +648,16 @@ imap_sieve_mailbox_transaction_run(
 
 	if (ret <= 0) {
 		// FIXME: temp fail should be handled properly
-		mailbox_free(&sbox);
 		return 0;
 	}
 
+	/* Get synchronized view on the mailbox */
+	sbox = mailbox_alloc(box->list, box->vname, 0);
+	if (mailbox_sync(sbox, 0) < 0) {
+		mailbox_free(&sbox);
+		return -1;
+	}
+
 	/* Create transaction for event messages */
 	st = mailbox_transaction_begin(sbox, 0);
 	headers_ctx = mailbox_header_lookup_init(sbox, wanted_headers);