diff --git a/src/lib-sieve/sieve-result.c b/src/lib-sieve/sieve-result.c
index 98871be916828d1bd0370099c23f3c3b1e1cfae9..85dc5264bebb9e0f78dd2bc508c40f4da01ee84a 100644
--- a/src/lib-sieve/sieve-result.c
+++ b/src/lib-sieve/sieve-result.c
@@ -1476,7 +1476,9 @@ int sieve_result_execute(struct sieve_result *result, bool last, bool *keep,
 	/* Perform implicit keep if necessary */
 
 	result_status = status;
-	if (result->executed || status != SIEVE_EXEC_TEMP_FAILURE) {
+	if (result->executed ||
+	    (status != SIEVE_EXEC_TEMP_FAILURE &&
+	     status != SIEVE_EXEC_RESOURCE_LIMIT)) {
 		/* Execute implicit keep if the transaction failed or when the implicit
 		 * keep was not canceled during transaction.
 		 */