diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c
index 9cd534a..3184f7e 100644
--- a/camel/providers/imapx/camel-imapx-server.c
+++ b/camel/providers/imapx/camel-imapx-server.c
@@ -4012,7 +4012,7 @@ imapx_command_select_done (CamelIMAPXServer *is,
 
 		QUEUE_LOCK (is);
 
-		if (select_pending != NULL) {
+		if (select_pending != NULL && (!ic->status || ic->status->condition != IMAPX_NOPERM)) {
 			GList *head = camel_imapx_command_queue_peek_head_link (is->queue);
 
 			for (link = head; link != NULL; link = g_list_next (link)) {
@@ -4033,6 +4033,11 @@ imapx_command_select_done (CamelIMAPXServer *is,
 
 				g_clear_object (&cw_mailbox);
 			}
+		} else if (select_pending != NULL && ic->status && ic->status->condition == IMAPX_NOPERM) {
+			/* This avoids another SELECT try on this mailbox;
+			   the mailbox can be write-only in this case. */
+			if (camel_imapx_mailbox_get_permanentflags (select_pending) == ~0)
+				camel_imapx_mailbox_set_permanentflags (select_pending, 0);
 		}
 
 		while ((link = g_queue_pop_head (&trash)) != NULL) {
@@ -8504,7 +8509,11 @@ camel_imapx_server_append_message (CamelIMAPXServer *is,
 	g_return_val_if_fail (CAMEL_IS_MIME_MESSAGE (message), FALSE);
 	/* CamelMessageInfo can be NULL. */
 
-	if (!imapx_ensure_mailbox_permanentflags (is, mailbox, cancellable, error))
+	/* That's okay if the "SELECT" fails here, as it can be due to
+	   the folder being write-only; just ignore the error and continue. */
+	imapx_ensure_mailbox_permanentflags (is, mailbox, cancellable, NULL);
+
+	if (g_cancellable_set_error_if_cancelled (cancellable, error))
 		return FALSE;
 
 	/* Append just assumes we have no/a dodgy connection.  We dump
