diff --git a/src/sentry/templates/sentry/debug/mail/preview.html b/src/sentry/templates/sentry/debug/mail/preview.html
new file mode 100644
index 00000000000000..52328fa3d3939c
--- /dev/null
+++ b/src/sentry/templates/sentry/debug/mail/preview.html
@@ -0,0 +1,8 @@
+
+
+ Mail Preview
+
+
+ {{ preview.html_body }}
+
+
diff --git a/src/sentry/web/frontend/debug/__init__.py b/src/sentry/web/frontend/debug/__init__.py
new file mode 100644
index 00000000000000..e69de29bb2d1d6
diff --git a/src/sentry/web/frontend/debug/mail.py b/src/sentry/web/frontend/debug/mail.py
new file mode 100644
index 00000000000000..e47fccf70a2609
--- /dev/null
+++ b/src/sentry/web/frontend/debug/mail.py
@@ -0,0 +1,61 @@
+from django.utils.safestring import mark_safe
+
+from sentry.models import Event, Group, Project, Team
+from sentry.web.helpers import render_to_response, render_to_string
+
+
+# TODO(dcramer): use https://github.com/disqus/django-mailviews
+class MailPreview(object):
+ def __init__(self, html_template, text_template, context):
+ self.html_template = html_template
+ self.text_template = text_template
+ self.context = context
+
+ def text_body(self):
+ return render_to_string(self.text_template, self.context)
+
+ def html_body(self):
+ return render_to_string(self.html_template, self.context)
+
+
+def new_event(request):
+ team = Team(
+ slug='example',
+ )
+ project = Project(
+ slug='example',
+ team=team,
+ )
+ group = Group(
+ project=project,
+ message='This is an example event.',
+ )
+
+ event = Event(
+ project=project,
+ group=group,
+ message=group.message,
+ )
+
+ interface_list = []
+ for interface in event.interfaces.itervalues():
+ body = interface.to_email_html(event)
+ if not body:
+ continue
+ interface_list.append((interface.get_title(), mark_safe(body)))
+
+ preview = MailPreview(
+ html_template='sentry/emails/error.html',
+ text_template='sentry/emails/error.html',
+ context={
+ 'group': group,
+ 'event': event,
+ 'link': '#link',
+ 'interfaces': interface_list,
+ 'settings_link': '#settings-link',
+ },
+ )
+
+ return render_to_response('sentry/debug/mail/preview.html', {
+ 'preview': preview,
+ })
diff --git a/src/sentry/web/urls.py b/src/sentry/web/urls.py
index 5f029ef2b04a04..e23b42805f9197 100644
--- a/src/sentry/web/urls.py
+++ b/src/sentry/web/urls.py
@@ -14,6 +14,8 @@
# django < 1.5 compat
from django.conf.urls.defaults import include, patterns, url # NOQA
+from django.conf import settings
+
from sentry.web import api
from sentry.web.frontend import (
alerts, accounts, generic, groups, events,
@@ -45,7 +47,17 @@ def init_all_applications():
init_all_applications()
-urlpatterns = patterns('',
+urlpatterns = patterns('')
+
+if settings.DEBUG:
+ import sentry.web.frontend.debug.mail
+
+ urlpatterns += patterns('',
+ url(r'^debug/mail/new-event/$',
+ sentry.web.frontend.debug.mail.new_event),
+ )
+
+urlpatterns += patterns('',
url(r'^_static/(?P[^/]+)/(?P.*)$', generic.static_media,
name='sentry-media'),