railties/lib/rails/templates/rails/mailers/email.html.erb
<!DOCTYPE html>
<html><head>
<title><%= @page_title %></title>
<meta name="viewport" content="width=device-width" />
<style type="text/css">
html, body, iframe {
height: 100%;
}
body {
margin: 0;
}
header {
width: 100%;
padding: 10px 0 0 0;
margin: 0;
background: white;
font: 12px "Lucida Grande", sans-serif;
border-bottom: 1px solid #dedede;
overflow: hidden;
}
dl {
margin: 0 0 10px 0;
padding: 0;
}
dt {
width: 80px;
padding: 1px;
float: left;
clear: left;
text-align: right;
color: #7f7f7f;
}
dd {
margin-left: 90px; /* 80px + 10px */
padding: 1px;
}
dd:empty:before {
content: "\00a0"; //
}
th {
font-weight: inherit;
color: #7f7f7f;
text-align: right;
white-space: nowrap;
}
iframe {
border: 0;
width: 100%;
}
</style>
</head>
<body>
<header>
<dl>
<% if Array(@email.from) != Array(@email.smtp_envelope_from) %>
<dt>SMTP-From:</dt>
<dd id="smtp_from"><%= @email.smtp_envelope_from %></dd>
<% end %>
<% if Set[*@email.to, *@email.cc, *@email.bcc] != Set[*@email.smtp_envelope_to] %>
<dt>SMTP-To:</dt>
<dd id="smtp_to"><%= @email.smtp_envelope_to.join(", ") %></dd>
<% end %>
<dt>From:</dt>
<dd id="from"><%= @email.header['from'] %></dd>
<% if @email.reply_to %>
<dt>Reply-To:</dt>
<dd id="reply_to"><%= @email.header['reply-to'] %></dd>
<% end %>
<dt>To:</dt>
<dd id="to"><%= @email.header['to'] %></dd>
<% if @email.cc %>
<dt>CC:</dt>
<dd id="cc"><%= @email.header['cc'] %></dd>
<% end %>
<% if @email.bcc %>
<dt>BCC:</dt>
<dd id="bcc"><%= @email.header['bcc'] %></dd>
<% end %>
<dt>Date:</dt>
<dd id="date"><%= @email.header['date'] || Time.current.rfc2822 %></dd>
<dt>Subject:</dt>
<dd><strong id="subject"><%= @email.subject %></strong></dd>
<% if @attachments.any? || @inline_attachments.any? %>
<dt>Attachments:</dt>
<dd>
<% @attachments.each do |filename, attachment| %>
<%= link_to filename, attachment_url(attachment), download: filename %>
<% end %>
<% if @inline_attachments.any? %>
(Inline: <% @inline_attachments.each do |filename, attachment| %>
<%= link_to filename, attachment_url(attachment), download: filename %><% end %>)
<% end %>
</dd>
<% end %>
<dt>Format:</dt>
<% if @email.html_part && @email.text_part %>
<dd>
<select id="part" onchange="refreshBody(false);">
<option <%= request.format == Mime[:html] ? 'selected' : '' %> value="<%= part_query('text/html') %>">View as HTML email</option>
<option <%= request.format == Mime[:text] ? 'selected' : '' %> value="<%= part_query('text/plain') %>">View as plain-text email</option>
</select>
</dd>
<% elsif @part %>
<dd id="mime_type" data-mime-type="<%= part_query(@part.mime_type) %>"><%= @part.mime_type == 'text/html' ? 'HTML email' : 'plain-text email' %></dd>
<% else %>
<dd id="mime_type" data-mime-type=""></dd>
<% end %>
<% if I18n.available_locales.count > 1 %>
<dt>Locale:</dt>
<dd>
<select id="locale" onchange="refreshBody(true);">
<% I18n.available_locales.each do |locale| %>
<option <%= I18n.locale == locale ? 'selected' : '' %> value="<%= locale_query(locale) %>"><%= locale %></option>
<% end %>
</select>
</dd>
<% end %>
<% unless @email.header_fields.nil? || @email.header_fields.empty? %>
<dt>Headers:</dt>
<dd>
<details>
<summary>Show all headers</summary>
<table>
<% @email.header_fields.each do |field| %>
<tr>
<th><%= field.name %>:</th>
<td><%= field.value %></td>
</tr>
<% end %>
</table>
</details>
</dd>
<% end %>
<dt>EML File:</dt>
<dd><%= link_to "Download", action: :download %></dd>
</dl>
</header>
<% if @part && @part.mime_type %>
<iframe name="messageBody" src="?<%= part_query(@part.mime_type) %>"></iframe>
<% else %>
<p>
You are trying to preview an email that does not have any content.
This is probably because the <em>mail</em> method has not been called in <em><%= @preview.preview_name %>#<%= @email_action %></em>.
</p>
<% end %>
<script>
function refreshBody(reload) {
var part_select = document.querySelector('select#part');
var locale_select = document.querySelector('select#locale');
var iframe = document.getElementsByName('messageBody')[0];
var part_param = part_select ?
part_select.options[part_select.selectedIndex].value :
document.querySelector('#mime_type').dataset.mimeType;
var locale_param = locale_select ? locale_select.options[locale_select.selectedIndex].value : null;
var fresh_location;
if (locale_param) {
fresh_location = '?' + part_param + '&' + locale_param;
} else {
fresh_location = '?' + part_param;
}
iframe.contentWindow.location = fresh_location;
var url = location.pathname.replace(/\.(txt|html)$/, '');
var format = /html/.test(part_param) ? '.html' : '.txt';
var state_to_replace = locale_param ? (url + format + '?' + locale_param) : (url + format);
if (reload) {
location.href = state_to_replace;
} else if (history.replaceState) {
window.history.replaceState({}, '', state_to_replace);
}
}
</script>
</body>
</html>