diff --git a/camel/camel-imapx-server.c b/camel/camel-imapx-server.c
index d414db4..01355d3 100644
--- a/camel/camel-imapx-server.c
+++ b/camel/camel-imapx-server.c
@@ -299,6 +299,9 @@ struct _CamelIMAPXServerPrivate {
 
 	CamelIMAPXStream *stream;
 	GMutex stream_lock;
+
+	GHashTable *known_alerts;
+	GMutex known_alerts_lock;
 };
 
 enum {
@@ -2072,6 +2075,37 @@ imapx_untagged_ok_no_bad (CamelIMAPXServer *is,
 		break;
 	case IMAPX_ALERT:
 		c (is->tagprefix, "ALERT!: %s\n", is->priv->context->sinfo->text);
+		g_mutex_lock (&is->priv->known_alerts_lock);
+
+		if (is->priv->context->sinfo->text &&
+		    !g_hash_table_lookup (is->priv->known_alerts, is->priv->context->sinfo->text)) {
+			CamelIMAPXStore *store;
+
+			store = camel_imapx_server_ref_store (is);
+			if (store) {
+				const gchar *alert = is->priv->context->sinfo->text;
+				gchar *msg;
+				CamelService *service;
+				CamelSession *session;
+
+				g_hash_table_insert (is->priv->known_alerts, g_strdup (alert), GINT_TO_POINTER (1));
+
+				service = CAMEL_SERVICE (store);
+				session = camel_service_get_session (service);
+
+				msg = g_strdup_printf (
+					_("Alert from IMAP server %s:\n%s"),
+					camel_service_get_display_name (service), alert);
+				camel_session_alert_user (
+					session, CAMEL_SESSION_ALERT_WARNING,
+					msg, NULL);
+				g_free (msg);
+
+				g_object_unref (store);
+			}
+		}
+
+		g_mutex_unlock (&is->priv->known_alerts_lock);
 		break;
 	case IMAPX_PARSE:
 		c (is->tagprefix, "PARSE: %s\n", is->priv->context->sinfo->text);
@@ -6325,6 +6359,9 @@ imapx_server_finalize (GObject *object)
 	g_free (is->priv->context);
 	g_hash_table_destroy (is->priv->untagged_handlers);
 
+	g_hash_table_destroy (is->priv->known_alerts);
+	g_mutex_clear (&is->priv->known_alerts_lock);
+
 	/* Chain up to parent's finalize() method. */
 	G_OBJECT_CLASS (camel_imapx_server_parent_class)->finalize (object);
 }
@@ -6421,6 +6458,7 @@ camel_imapx_server_init (CamelIMAPXServer *is)
 	is->priv->untagged_handlers = create_initial_untagged_handler_table ();
 
 	g_mutex_init (&is->priv->stream_lock);
+	g_mutex_init (&is->priv->known_alerts_lock);
 
 	is->queue = camel_imapx_command_queue_new ();
 	is->active = camel_imapx_command_queue_new ();
@@ -6441,6 +6479,8 @@ camel_imapx_server_init (CamelIMAPXServer *is)
 
 	is->fetch_mutex = g_mutex_new ();
 	is->fetch_cond = g_cond_new ();
+
+	is->priv->known_alerts = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
 }
 
 CamelIMAPXServer *
