diff --git a/reviewboard/accounts/evolutions/__init__.py b/reviewboard/accounts/evolutions/__init__.py
--- /dev/null
+++ b/reviewboard/accounts/evolutions/__init__.py
@@ -0,0 +1,3 @@
+SEQUENCE = [
+    'mail_notifications_enabled',
+]
diff --git a/reviewboard/accounts/evolutions/mail_notifications_enabled.py b/reviewboard/accounts/evolutions/mail_notifications_enabled.py
--- /dev/null
+++ b/reviewboard/accounts/evolutions/mail_notifications_enabled.py
@@ -0,0 +1,6 @@
+from django_evolution.mutations import *
+from django.db import models
+
+MUTATIONS = [
+    AddField('Profile', 'mail_notifications_enabled', models.BooleanField, initial=True)
+]
diff --git a/reviewboard/accounts/forms.py b/reviewboard/accounts/forms.py
--- a/reviewboard/accounts/forms.py
+++ b/reviewboard/accounts/forms.py
@@ -21,6 +21,8 @@ class PreferencesForm(forms.Form):
                                        required=False)
     syntax_highlighting = forms.BooleanField(required=False,
         label=_("Enable syntax highlighting in the diff viewer"))
+    mail_notifications_enabled = forms.BooleanField(required=False,
+        label=_("Enable e-mail notifications for created or changed reviews"))
     first_name = forms.CharField(required=False)
     last_name = forms.CharField(required=False)
     email = forms.EmailField()
@@ -75,6 +77,7 @@ class PreferencesForm(forms.Form):
         profile = user.get_profile()
         profile.first_time_setup_done = True
         profile.syntax_highlighting = self.cleaned_data['syntax_highlighting']
+        profile.mail_notifications_enabled = self.cleaned_data['mail_notifications_enabled']
         profile.save()
 
     def clean_password2(self):
diff --git a/reviewboard/accounts/models.py b/reviewboard/accounts/models.py
--- a/reviewboard/accounts/models.py
+++ b/reviewboard/accounts/models.py
@@ -60,6 +60,11 @@ class Profile(models.Model):
         help_text=_("Indicates whether the user wishes to see "
                     "syntax highlighting in the diffs."))
 
+    mail_notifications_enabled = models.BooleanField(default=True,
+        verbose_name=_("enable e-mail notifications"),
+        help_text=_("Allows e-mail notifications to be sent to the user "
+                    "when related reviews are created or changed."))
+
     # Indicate whether submitted review requests should appear in the
     # review request lists (excluding the dashboard).
     show_submitted = models.BooleanField(default=True)
diff --git a/reviewboard/accounts/views.py b/reviewboard/accounts/views.py
--- a/reviewboard/accounts/views.py
+++ b/reviewboard/accounts/views.py
@@ -62,6 +62,7 @@ def user_preferences(request, template_name='accounts/prefs.html'):
             'last_name': request.user.last_name,
             'email': request.user.email,
             'syntax_highlighting': profile.syntax_highlighting,
+            'mail_notifications_enabled': profile.mail_notifications_enabled,
             'groups': [g.id for g in request.user.review_groups.all()],
         })
 
diff --git a/reviewboard/notifications/email.py b/reviewboard/notifications/email.py
--- a/reviewboard/notifications/email.py
+++ b/reviewboard/notifications/email.py
@@ -61,6 +61,15 @@ def build_email_address(fullname, email):
         return u'"%s" <%s>' % (fullname, email)
 
 
+def user_wants_mail_notifications(user):
+    if not user.is_active:
+        return False
+    profile = user.get_profile()
+    if profile and not profile.mail_notifications_enabled:
+        return False
+    return True
+
+
 def get_email_address_for_user(u):
     return build_email_address(u.get_full_name(), u.email)
 
@@ -77,8 +86,11 @@ def get_email_addresses_for_group(g):
             # attached to it, so just return their custom list as-is.
             return g.mailing_list.split(',')
     else:
-        return [get_email_address_for_user(u)
-                for u in g.users.filter(is_active=True)]
+        addresses = []
+        for u in g.users.all():
+            if user_wants_mail_notifications(u):
+                addresses.append(get_email_address_for_user(u))
+        return addresses
 
 
 class SpiffyEmailMessage(EmailMultiAlternatives):
@@ -143,26 +155,31 @@ def send_review_mail(user, review_request, subject, in_reply_to,
     recipients = set([from_email])
     to_field = set()
 
-    if review_request.submitter.is_active:
+    if user_wants_mail_notifications(review_request.submitter):
         recipients.add(get_email_address_for_user(review_request.submitter))
 
-    for u in review_request.target_people.filter(is_active=True):
-        recipients.add(get_email_address_for_user(u))
-        to_field.add(get_email_address_for_user(u))
+    for u in review_request.target_people.all():
+        if user_wants_mail_notifications(u):
+            recipients.add(get_email_address_for_user(u))
+            to_field.add(get_email_address_for_user(u))
 
     for group in review_request.target_groups.all():
         for address in get_email_addresses_for_group(group):
             recipients.add(address)
 
     for profile in review_request.starred_by.all():
-        if profile.user.is_active:
+        if user_wants_mail_notifications(profile.user):
             recipients.add(get_email_address_for_user(profile.user))
 
     if extra_recipients:
         for recipient in extra_recipients:
-            if recipient.is_active:
+            if user_wants_mail_notifications(recipient):
                 recipients.add(get_email_address_for_user(recipient))
 
+    # Don't send mail to user whose action is causing this mail to be sent.
+    recipients -= set([from_email])
+    to_field -= set([from_email])
+
     siteconfig = current_site.config.get()
     domain_method = siteconfig.get("site_domain_method")
 
diff --git a/reviewboard/templates/accounts/prefs.html b/reviewboard/templates/accounts/prefs.html
--- a/reviewboard/templates/accounts/prefs.html
+++ b/reviewboard/templates/accounts/prefs.html
@@ -42,6 +42,12 @@
     <td>{{form.syntax_highlighting}} {{form.syntax_highlighting.label}}</td>
    </tr>
 {% endif %}
+{% if siteconfig.settings.mail_send_review_mail %}
+   <tr>
+    <td></td>
+    <td>{{form.mail_notifications_enabled}} {{form.mail_notifications_enabled.label}}</td>
+   </tr>
+{% endif %}
   </table>
  </div>
 {% endbox %}
