diff --git a/opentech/public/mailchimp/tests.py b/opentech/public/mailchimp/tests.py
index 660e53682013e8da00dfe3c8d176bb95dfb41566..4e838712116aa9e1e3ef5ebae892e6706f7b1d64 100644
--- a/opentech/public/mailchimp/tests.py
+++ b/opentech/public/mailchimp/tests.py
@@ -7,6 +7,9 @@ from django.urls import reverse
 import responses
 
 
+any_url = re.compile(".")
+
+
 class TestNewsletterView(TestCase):
     url = reverse('newsletter:subscribe')
 
@@ -19,7 +22,14 @@ class TestNewsletterView(TestCase):
         request = response.request
         self.assertRedirects(response, '{}://{}/'.format(request['wsgi.url_scheme'], request['SERVER_NAME']))
 
+    @override_settings(
+        MAILCHIMP_API_KEY='a' * 32,
+        MAILCHIMP_LIST_ID='12345'
+    )
+    @responses.activate
     def test_can_subscribe(self):
+        responses.add(responses.POST, any_url, json={'id': '1234'}, status=200)
+
         response = self.client.post(self.url, data={'email': 'email@email.com'}, secure=True, follow=True)
         self.assertRedirects(response, self.origin)
 
@@ -42,7 +52,6 @@ class TestNewsletterView(TestCase):
     @responses.activate
     @mock.patch('opentech.public.mailchimp.views.logging')
     def test_error_with_mailchimp(self, logging):
-        any_url = re.compile(".")
         # Copied from the mailchimp playground
         response_data = {
             "title": "Invalid Resource",
diff --git a/opentech/public/mailchimp/views.py b/opentech/public/mailchimp/views.py
index e06f1263da184561ac03e2373f59e427052bac81..19a7f6795851dc2bbf029d4035a9e7772b9ee436 100644
--- a/opentech/public/mailchimp/views.py
+++ b/opentech/public/mailchimp/views.py
@@ -28,7 +28,7 @@ class MailchimpSubscribeView(FormMixin, RedirectView):
             return self.form_invalid(form)
 
     def form_invalid(self, form):
-        messages.error(self.request, _('Sorry, there were errors with your form.') + str(form.errors))
+        self.error(form)
         return HttpResponseRedirect(self.get_success_url())
 
     def form_valid(self, form):
@@ -51,12 +51,30 @@ class MailchimpSubscribeView(FormMixin, RedirectView):
                 'merge_fields': data,
             })
         except Exception as e:
-            messages.warning(self.request, _('Sorry, there has been an problem. Please try again later.'))
-            logging.info(e.args[0])
+            self.warning(e)
         else:
-            messages.success(self.request, _('Thank you for subscribing'))
+            if mailchimp_enabled:
+                self.success()
+            else:
+                self.warning(Exception(
+                    'Incorrect Mailchimp configuration: API_KEY: {}, LIST_ID: {}'.format(
+                        str(settings.MAILCHIMP_API_KEY),
+                        str(settings.MAILCHIMP_LIST_ID),
+                    )
+                ))
+
         return super().form_valid(form)
 
+    def error(self, form):
+        messages.error(self.request, _('Sorry, there were errors with your form.') + str(form.errors))
+
+    def warning(self, e):
+        messages.warning(self.request, _('Sorry, there has been an problem. Please try again later.'))
+        logging.info(e.args[0])
+
+    def success(self):
+        messages.success(self.request, _('Thank you for subscribing'))
+
     def get_success_url(self):
         # Go back to where you came from
         return self.request.META['HTTP_ORIGIN']
diff --git a/opentech/static_src/src/sass/public/components/_messages.scss b/opentech/static_src/src/sass/public/components/_messages.scss
index 8df0d97850c24e8266b26c44c9bc8134b90e6ab1..a732b3c02c88324a2409d84b2ed4c7136d6bd1db 100644
--- a/opentech/static_src/src/sass/public/components/_messages.scss
+++ b/opentech/static_src/src/sass/public/components/_messages.scss
@@ -18,7 +18,7 @@
             border-color: darken($color--mint, 20%);
         }
 
-        &--warning {
+        &--warning, &--error {
             font-weight: bold;
             color: $color--white;
             background: $color--error;