diff --git a/src/lib-sieve/sieve-actions.c b/src/lib-sieve/sieve-actions.c
index 2462395079d47bcc948bf3076f235616328c2509..be5e0f2242098996f75a2ab9ba8f807692cbf0c8 100644
--- a/src/lib-sieve/sieve-actions.c
+++ b/src/lib-sieve/sieve-actions.c
@@ -168,10 +168,18 @@ static void act_store_get_storage_error
 static struct mailbox *act_store_mailbox_open
 (const struct sieve_action_exec_env *aenv, struct mail_namespace *ns, const char *folder)
 {
+	enum mailbox_open_flags open_flags = 
+		MAILBOX_OPEN_FAST | MAILBOX_OPEN_KEEP_RECENT | 
+		MAILBOX_OPEN_SAVEONLY | MAILBOX_OPEN_POST_SESSION;
 	struct mailbox *box;
 
+	if (strcasecmp(name, "INBOX") == 0) {
+        /* Deliveries to INBOX must always succeed, regardless of ACLs */
+        open_flags |= MAILBOX_OPEN_IGNORE_ACLS;
+    }
+
 	box = mailbox_open
-		(ns->storage, folder, NULL, MAILBOX_OPEN_FAST |MAILBOX_OPEN_KEEP_RECENT);
+		(ns->storage, folder, NULL, open_flags);
 		
 	if ( box == NULL && aenv->scriptenv->mailbox_autocreate ) {
 		enum mail_error error;
@@ -191,7 +199,7 @@ static struct mailbox *act_store_mailbox_open
 
 		/* Try opening again */
 		box = mailbox_open
-			(ns->storage, folder, NULL, MAILBOX_OPEN_FAST | MAILBOX_OPEN_KEEP_RECENT);
+			(ns->storage, folder, NULL, open_flags);
     
 		if (box == NULL)
 			return NULL;