diff --git a/django/conf/global_settings.py b/django/conf/global_settings.py
index 0aee63d..f4a75f6 100644
--- a/django/conf/global_settings.py
+++ b/django/conf/global_settings.py
@@ -142,8 +142,8 @@ FILE_CHARSET = 'utf-8'
 # E-mail address that error messages come from.
 SERVER_EMAIL = 'root@localhost'
 
-# Whether to send broken-link emails.
-SEND_BROKEN_LINK_EMAILS = False
+# Whether to send broken-link emails. Can be 'all', 'internal' or 'none'.
+SEND_BROKEN_LINK_EMAILS = 'none'
 
 # Database connection info.
 DATABASES = {
@@ -245,7 +245,7 @@ ALLOWED_INCLUDE_ROOTS = ()
 ADMIN_FOR = ()
 
 # List of compiled regular expression objects representing URLs that need not
-# be reported when SEND_BROKEN_LINK_EMAILS is True. Here are a few examples:
+# be reported when SEND_BROKEN_LINK_EMAILS is 'all' or 'internal'. Here are a few examples:
 #    import re
 #    IGNORABLE_404_URLS = (
 #        re.compile(r'^/apple-touch-icon.*\.png$'),
diff --git a/django/middleware/common.py b/django/middleware/common.py
index 4dd2e14..4609e3d 100644
--- a/django/middleware/common.py
+++ b/django/middleware/common.py
@@ -92,20 +92,22 @@ class CommonMiddleware(object):
     def process_response(self, request, response):
         "Send broken link emails and calculate the Etag, if needed."
         if response.status_code == 404:
-            if settings.SEND_BROKEN_LINK_EMAILS and not settings.DEBUG:
+            if settings.SEND_BROKEN_LINK_EMAILS in ['all', 'internal', True] and not settings.DEBUG:
                 # If the referrer was from an internal link or a non-search-engine site,
                 # send a note to the managers.
                 domain = request.get_host()
                 referer = request.META.get('HTTP_REFERER', None)
-                is_internal = _is_internal_request(domain, referer)
                 path = request.get_full_path()
-                if referer and not _is_ignorable_404(path) and (is_internal or '?' not in referer):
-                    ua = request.META.get('HTTP_USER_AGENT', '<none>')
-                    ip = request.META.get('REMOTE_ADDR', '<none>')
-                    mail_managers("Broken %slink on %s" % ((is_internal and 'INTERNAL ' or ''), domain),
-                        "Referrer: %s\nRequested URL: %s\nUser agent: %s\nIP address: %s\n" \
-                                  % (referer, request.get_full_path(), ua, ip),
-                                  fail_silently=True)
+                if referer and not _is_ignorable_404(path):
+                    is_internal = _is_internal_request(domain, referer)
+                    notify = is_internal if settings.SEND_BROKEN_LINK_EMAILS == 'internal' else ('?' not in referer)
+                    if notify:
+                        ua = request.META.get('HTTP_USER_AGENT', '<none>')
+                        ip = request.META.get('REMOTE_ADDR', '<none>')
+                        mail_managers("Broken %slink on %s" % ((is_internal and 'INTERNAL ' or ''), domain),
+                            "Referrer: %s\nRequested URL: %s\nUser agent: %s\nIP address: %s\n" \
+                                    % (referer, request.get_full_path(), ua, ip),
+                                    fail_silently=True)
                 return response
 
         # Use ETags, if requested.
diff --git a/docs/howto/error-reporting.txt b/docs/howto/error-reporting.txt
index 64af2a0..ddb9e65 100644
--- a/docs/howto/error-reporting.txt
+++ b/docs/howto/error-reporting.txt
@@ -58,7 +58,7 @@ not found" errors). Django sends emails about 404 errors when:
 
 * :setting:`DEBUG` is ``False``
 
-* :setting:`SEND_BROKEN_LINK_EMAILS` is ``True``
+* :setting:`SEND_BROKEN_LINK_EMAILS` is ``'all'`` or ``'internal'``
 
 * Your :setting:`MIDDLEWARE_CLASSES` setting includes ``CommonMiddleware``
   (which it does by default).
@@ -95,7 +95,7 @@ crawlers often request::
 periods to escape them.)
 
 The best way to disable this behavior is to set
-:setting:`SEND_BROKEN_LINK_EMAILS` to ``False``.
+:setting:`SEND_BROKEN_LINK_EMAILS` to 'none'.
 
 .. seealso::
 
diff --git a/docs/ref/middleware.txt b/docs/ref/middleware.txt
index 737e0b2..802e658 100644
--- a/docs/ref/middleware.txt
+++ b/docs/ref/middleware.txt
@@ -62,7 +62,7 @@ Adds a few conveniences for perfectionists:
   normalize URLs.
 
 * Sends broken link notification emails to :setting:`MANAGERS` if
-  :setting:`SEND_BROKEN_LINK_EMAILS` is set to ``True``.
+  :setting:`SEND_BROKEN_LINK_EMAILS` is set to ``'all'`` or ``'internal'``.
 
 * Handles ETags based on the :setting:`USE_ETAGS` setting. If
   :setting:`USE_ETAGS` is set to ``True``, Django will calculate an ETag
diff --git a/docs/ref/settings.txt b/docs/ref/settings.txt
index a35d99a..c2cf443 100644
--- a/docs/ref/settings.txt
+++ b/docs/ref/settings.txt
@@ -1133,7 +1133,7 @@ ignored when reporting HTTP 404 errors via email (see
 commonly requested file such as ``favicon.ico`` or ``robots.txt``, or if it
 gets hammered by script kiddies.
 
-This is only used if :setting:`SEND_BROKEN_LINK_EMAILS` is set to ``True`` and
+This is only used if :setting:`SEND_BROKEN_LINK_EMAILS` is set to ``'all'`` or ``'internal'`` and
 ``CommonMiddleware`` is installed (see :doc:`/topics/http/middleware`).
 
 .. setting:: INSTALLED_APPS
@@ -1330,7 +1330,7 @@ MANAGERS
 Default: ``()`` (Empty tuple)
 
 A tuple in the same format as :setting:`ADMINS` that specifies who should get
-broken-link notifications when ``SEND_BROKEN_LINK_EMAILS=True``.
+broken-link notifications when ``SEND_BROKEN_LINK_EMAILS`` is ``'all'`` or ``'internal'``.
 
 .. setting:: MEDIA_ROOT
 
@@ -1533,12 +1533,13 @@ better. ``django-admin.py startproject`` creates one automatically.
 SEND_BROKEN_LINK_EMAILS
 -----------------------
 
-Default: ``False``
+Default: ``'none'``
 
 Whether to send an email to the :setting:`MANAGERS` each time somebody visits
 a Django-powered page that is 404ed with a non-empty referer (i.e., a broken
 link). This is only used if ``CommonMiddleware`` is installed (see
-:doc:`/topics/http/middleware`). See also :setting:`IGNORABLE_404_URLS` and
+:doc:`/topics/http/middleware`). Valid values are ``'none'``, ``'all'``
+and ``'internal'``. See also :setting:`IGNORABLE_404_URLS` and
 :doc:`/howto/error-reporting`.
 
 .. setting:: SERIALIZATION_MODULES
diff --git a/tests/regressiontests/middleware/tests.py b/tests/regressiontests/middleware/tests.py
index 124eb19..272d784 100644
--- a/tests/regressiontests/middleware/tests.py
+++ b/tests/regressiontests/middleware/tests.py
@@ -262,7 +262,7 @@ class CommonMiddlewareTest(TestCase):
 
     def test_404_error_reporting(self):
         settings.IGNORABLE_404_URLS = (re.compile(r'foo'),)
-        settings.SEND_BROKEN_LINK_EMAILS = True
+        settings.SEND_BROKEN_LINK_EMAILS = 'all'
         request = self._get_request('regular_url/that/does/not/exist')
         request.META['HTTP_REFERER'] = '/another/url/'
         response = self.client.get(request.path)
@@ -272,7 +272,7 @@ class CommonMiddlewareTest(TestCase):
 
     def test_404_error_reporting_no_referer(self):
         settings.IGNORABLE_404_URLS = (re.compile(r'foo'),)
-        settings.SEND_BROKEN_LINK_EMAILS = True
+        settings.SEND_BROKEN_LINK_EMAILS = 'all'
         request = self._get_request('regular_url/that/does/not/exist')
         response = self.client.get(request.path)
         CommonMiddleware().process_response(request, response)
@@ -280,13 +280,32 @@ class CommonMiddlewareTest(TestCase):
 
     def test_404_error_reporting_ignored_url(self):
         settings.IGNORABLE_404_URLS = (re.compile(r'foo'),)
-        settings.SEND_BROKEN_LINK_EMAILS = True
+        settings.SEND_BROKEN_LINK_EMAILS = 'all'
         request = self._get_request('foo_url/that/does/not/exist/either')
         request.META['HTTP_REFERER'] = '/another/url/'
         response = self.client.get(request.path)
         CommonMiddleware().process_response(request, response)
         self.assertEqual(len(mail.outbox), 0)
 
+    def test_404_error_reporting_internal(self):
+        settings.IGNORABLE_404_URLS = (re.compile(r'foo'),)
+        settings.SEND_BROKEN_LINK_EMAILS = 'internal'
+        request = self._get_request('regular_url/that/does/not/exist')
+        request.META['HTTP_REFERER'] = 'http://testserver/another/url/'
+        response = self.client.get(request.path)
+        CommonMiddleware().process_response(request, response)
+        self.assertEqual(len(mail.outbox), 1)
+        self.assertIn('Broken', mail.outbox[0].subject)
+
+    def test_404_error_reporting_external_ignore(self):
+        settings.IGNORABLE_404_URLS = (re.compile(r'foo'),)
+        settings.SEND_BROKEN_LINK_EMAILS = 'internal'
+        request = self._get_request('regular_url/that/does/not/exist')
+        request.META['HTTP_REFERER'] = '/another/url/'
+        response = self.client.get(request.path)
+        CommonMiddleware().process_response(request, response)
+        self.assertEqual(len(mail.outbox), 0)
+
 
 class ConditionalGetMiddlewareTest(TestCase):
     urls = 'regressiontests.middleware.cond_get_urls'
