diff --git a/docs/manual/extending/extensions/hooks/template-hook.rst b/docs/manual/extending/extensions/hooks/template-hook.rst
index b7f67cb513d640ef3f4cc35d4e7adacfd3671738..8455a9c303aab59b528f50a6ff805c765350b1d5 100644
--- a/docs/manual/extending/extensions/hooks/template-hook.rst
+++ b/docs/manual/extending/extensions/hooks/template-hook.rst
@@ -65,6 +65,18 @@ Login Page
 +----------------------------+----------------------------------------------+
 
 
+Notifications
+-------------
+
++----------------------------+----------------------------------------------+
+| Name                       | Location                                     |
++============================+==============================================+
+| review-email-html-summary  | Displayed right before the review header.    |
++----------------------------+----------------------------------------------+
+| review-email-text-summary  | Displayed right before the review header.    |
++----------------------------+----------------------------------------------+
+
+
 Registration Page
 -----------------
 
diff --git a/reviewboard/notifications/email.py b/reviewboard/notifications/email.py
index 761e826543ae2016999f22b63c3ad7719ca8a1c5..fe87c4c9b4d6ef4e1a33454569203d9d9b23b617 100644
--- a/reviewboard/notifications/email.py
+++ b/reviewboard/notifications/email.py
@@ -2,7 +2,6 @@ from __future__ import absolute_import, unicode_literals
 
 import email
 import logging
-from email.utils import formataddr
 from collections import defaultdict
 
 from django.conf import settings
@@ -125,7 +124,8 @@ def review_request_published_cb(sender, user, review_request, trivial,
         mail_review_request(review_request, user, changedesc)
 
 
-def review_published_cb(sender, user, review, to_submitter_only, **kwargs):
+def review_published_cb(sender, user, review, to_submitter_only, request,
+                        **kwargs):
     """Send e-mail when a review is published.
 
     Listens to the :py:data:`~reviewboard.reviews.signals.review_published`
@@ -135,7 +135,7 @@ def review_published_cb(sender, user, review, to_submitter_only, **kwargs):
     siteconfig = SiteConfiguration.objects.get_current()
 
     if siteconfig.get('mail_send_review_mail'):
-        mail_review(review, user, to_submitter_only)
+        mail_review(review, user, to_submitter_only, request)
 
 
 def reply_published_cb(sender, user, reply, trivial, **kwargs):
@@ -749,15 +749,22 @@ def mail_review_request(review_request, from_user=None, changedesc=None,
     review_request.save()
 
 
-def mail_review(review, user, to_submitter_only):
+def mail_review(review, user, to_submitter_only, request):
     """Send an e-mail representing the supplied review.
 
     Args:
         review (reviewboard.reviews.models.Review):
             The review to send an e-mail about.
 
+        user (django.contrib.auth.models.User):
+            The user who published the review.
+
         to_submitter_only (bool):
             Determines if the review is to the submitter only or not.
+
+        request (django.http.HttpRequest):
+            The request object if the review was published from an HTTP
+            request.
     """
     review_request = review.review_request
 
@@ -774,6 +781,7 @@ def mail_review(review, user, to_submitter_only):
         'user': review.user,
         'review': review,
         'has_issues': has_issues,
+        'request': request,
     }
 
     extra_headers = {}
diff --git a/reviewboard/reviews/models/review.py b/reviewboard/reviews/models/review.py
index 75008ed7fa0872550b5ada7c49352895e0a222cd..97b9286b5923116a51db8cdea17afd14e48d9e98 100644
--- a/reviewboard/reviews/models/review.py
+++ b/reviewboard/reviews/models/review.py
@@ -212,7 +212,8 @@ class Review(models.Model):
 
         super(Review, self).save()
 
-    def publish(self, user=None, trivial=False, to_submitter_only=False):
+    def publish(self, user=None, trivial=False, to_submitter_only=False,
+                request=None):
         """Publishes this review.
 
         This will make the review public and update the timestamps of all
@@ -271,7 +272,8 @@ class Review(models.Model):
 
             review_published.send(sender=self.__class__,
                                   user=user, review=self,
-                                  to_submitter_only=to_submitter_only)
+                                  to_submitter_only=to_submitter_only,
+                                  request=request)
 
     def delete(self):
         """Deletes this review.
diff --git a/reviewboard/reviews/signals.py b/reviewboard/reviews/signals.py
index 3018c97f173de0023fddd1bf33b3b8760efa8a2d..df12403748abb3a4c1544f73845c0256881501e2 100644
--- a/reviewboard/reviews/signals.py
+++ b/reviewboard/reviews/signals.py
@@ -110,7 +110,7 @@ review_publishing = Signal(providing_args=['user', 'review',
 #:
 #: Args:
 #:     user (django.contrib.auth.models.User):
-#:         The user who published the review request.
+#:         The user who published the review.
 #:
 #:     review (reviewboard.reviews.models.Review):
 #:         The review that was published.
@@ -118,8 +118,11 @@ review_publishing = Signal(providing_args=['user', 'review',
 #:     to_submitter_only (boolean):
 #:         Whether the review e-mail should be sent only to the review request
 #:         submitter.
-review_published = Signal(providing_args=['user', 'review',
-                                          'to_submitter_only'])
+#:
+#:     request (django.http.HttpRequest):
+#:         The request object if the review was published from an HTTP request.
+review_published = Signal(
+    providing_args=['user', 'review', 'to_submitter_only', 'request'])
 
 
 #: Emitted when a reply to a review is being published.
diff --git a/reviewboard/templates/notifications/review_email.html b/reviewboard/templates/notifications/review_email.html
index f24bea945906c3cd73a4b367aca7b00accc185bc..773e7298e34554e87268d63758f6d57135eb9e5c 100644
--- a/reviewboard/templates/notifications/review_email.html
+++ b/reviewboard/templates/notifications/review_email.html
@@ -1,5 +1,6 @@
 {% extends "notifications/email_base.html" %}
-{% load djblets_email djblets_utils markdown_email rb_extensions %}
+{% load djblets_email djblets_extensions djblets_utils %}
+{% load markdown_email rb_extensions %}
 
 {% block content %}
 {% if review.ship_it %}
@@ -12,6 +13,7 @@
 </p>
 {% endif %}
 
+{% template_hook_point "review-email-html-summary" %}
 {% if review.body_top %}
  <pre style="{{precss}}">{{review.body_top|markdown_email_html:review.body_top_rich_text}}</pre>
  <br />
diff --git a/reviewboard/templates/notifications/review_email.txt b/reviewboard/templates/notifications/review_email.txt
index 7cdeb24f7e7d9ff9d25559058dde1cd106399f11..2c13bb4a7e5fd71e60e8642f7b4e19eb4edc7827 100644
--- a/reviewboard/templates/notifications/review_email.txt
+++ b/reviewboard/templates/notifications/review_email.txt
@@ -1,4 +1,4 @@
-{% autoescape off %}{% load djblets_email djblets_utils markdown_email rb_extensions reviewtags %}
+{% autoescape off %}{% load djblets_email djblets_extensions djblets_utils markdown_email rb_extensions reviewtags %}
 -----------------------------------------------------------
 This is an automatically generated e-mail. To reply, visit:
 {{domain_method}}://{{domain}}{{review.get_absolute_url}}
@@ -10,7 +10,7 @@ This is an automatically generated e-mail. To reply, visit:
 {{review.SHIP_IT_TEXT}}
 {%  endif %}
 {% endif %}
-
+{% template_hook_point "review-email-text-summary" %}
 {% if review.body_top %}
 {{review.body_top|markdown_email_text:review.body_top_rich_text}}
 {% endif %}{% for comment in review.file_attachment_comments.all %}
diff --git a/reviewboard/webapi/resources/base_review.py b/reviewboard/webapi/resources/base_review.py
index c489039bcdfbc4b72328be99bac73413ba30dbef..e467da3a1d544cdc681f79bb89a4f65a5fa64725 100644
--- a/reviewboard/webapi/resources/base_review.py
+++ b/reviewboard/webapi/resources/base_review.py
@@ -317,7 +317,8 @@ class BaseReviewResource(MarkdownFieldsMixin, WebAPIResource):
         if public:
             try:
                 review.publish(user=request.user,
-                               to_submitter_only=publish_to_submitter_only)
+                               to_submitter_only=publish_to_submitter_only,
+                               request=request)
             except PublishError as e:
                 return PUBLISH_ERROR.with_message(six.text_type(e))
 
