Mail templates for monitoring mails

This commit is contained in:
baldo 2016-06-11 15:13:06 +02:00
parent 71690b7d5c
commit eb3e0d96be
14 changed files with 250 additions and 100 deletions

View file

@ -1,106 +1,42 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <%= header() %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type="text/css"> <p>
body { für einen Deiner Knoten wurde der automatisierte Versand von Status-E-Mails aktiviert. Um sicherzustellen, dass
margin: 0; Du wirklich der richtige Empfänger für diese E-Mails bist, bitten wir Dich, Deine E-Mail-Adresse durch einen
padding: 0; Klick auf den Bestätiguns-Link unten zu bestätigen. Erst danach wird der Versand von Status-E-Mails wirklich
} stattfinden.
</p>
th { <table width="100%" border="0" cellspacing="0" cellpadding="0" style="margin-top: 45px;">
font-weight: bold; <tr>
text-align: left; <td align="center">
padding-right: 10px; <table class="table" style="border: 3px dashed #666666; padding: 10px; background-color: #F5F5F5; font-size: 1.3em;">
} <tr>
<th>Knoten</th>
<td><%- node.hostname %></td>
</tr>
em { <tr>
font-size: 0.9em; <th>Empfänger</th>
} <td><%= link('mailto:' + node.email, node.email) %></td>
</style> </tr>
</head> </table>
</td>
</tr>
</table>
<body> <table width="100%" border="0" cellspacing="0" cellpadding="0" style="margin-top: 45px; margin-bottom: 45px;">
<table border="0" cellpadding="10" cellspacing="0" bgcolor="#EDEDED"> <tr>
<tr> <td align="center" style="font-size: 1.5em;">
<td style="color: #444444; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, sans-serif;"> <strong>
<p> <%= link(confirmUrl, '» E-Mail-Adresse bestätigen «') %>
<strong style="font-size: 1.5em;">Hallo <%- node.nickname %>,</strong> </strong>
</p> </td>
</tr>
</table>
<p> <p></p>
für einen Deiner Knoten wurde der automatisierte Versand von Status-E-Mails aktiviert. Um sicherzustellen, dass
Du wirklich der richtige Empfänger für diese E-Mails bist, bitten wir Dich, Deine E-Mail-Adresse durch einen
Klick auf den Bestätiguns-Link unten zu bestätigen. Erst danach wird der Versand von Status-E-Mails wirklich
stattfinden.
</p>
<table width="100%" border="0" cellspacing="0" cellpadding="0" style="margin-top: 45px;"> <%= monitoringFooter() %>
<tr>
<td align="center">
<table class="table" style="border: 3px dashed #666666; padding: 10px; background-color: #F5F5F5; font-size: 1.3em;">
<tr>
<th>Knoten</th>
<td><%- node.hostname %></td>
</tr>
<tr> <%= footer() %>
<th>Empfänger</th>
<td><a href="mailto:<%- node.email %>" style="color: #E5287A;"><%- node.email %></a></td>
</tr>
</table>
</td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0" style="margin-top: 45px; margin-bottom: 45px;">
<tr>
<td align="center" style="font-size: 1.5em;">
<strong>
<a href="<%- confirmUrl %>" style="color: #E5287A;">» E-Mail-Adresse bestätigen «</a>
</strong>
</td>
</tr>
</table>
<p></p>
<p>
Bei Fragen wende Dich gerne an
<a href="mailto:<%- community.contactEmail %>" style="color: #E5287A;"><%- community.contactEmail %></a>.
</p>
<p>
<strong>
Viele Grüße<br />
Dein <%- community.name %>
</strong>
</p>
<hr style="border-top: 1px solid #333333; border-left: 0; border-right: 0; border-bottom: 0;" />
<p>
<em>
Möchtest Du keine Status-E-Mails zu Diesem Knoten mehr erhalten, so kannst Du den Versand
jederzeit <a href="<%- disableUrl %>" style="color: #E5287A;">deaktivieren</a>.
</em>
</p>
<p>
<em>
Alternativ kannst Du die Versandeinstellungen auch jederzeit unter
<a href="<%- editNodeUrl %>" style="color: #E5287A;"><%- editNodeUrl %></a>
ändern.
</em>
</p>
<p>
<em>
Bitte habe Verständnis dafür, dass das An- und Abschalten des Versands für jeden Deiner Knoten
einzeln erfolgt.
</em>
</p>
</td>
</tr>
</table>
</body>
</html>

View file

@ -0,0 +1,11 @@
<%= header() %>
<%=
snippet('monitoring-offline', {
mailNum: 1
})
%>
<%= monitoringFooter() %>
<%= footer() %>

View file

@ -0,0 +1 @@
Dein Knoten <%- node.hostname %> ist offline

View file

@ -0,0 +1,11 @@
<%= header() %>
<%=
snippet('monitoring-offline', {
mailNum: 2
})
%>
<%= monitoringFooter() %>
<%= footer() %>

View file

@ -0,0 +1 @@
Dein Knoten <%- node.hostname %> ist weiterhin offline

View file

@ -0,0 +1,11 @@
<%= header() %>
<%=
snippet('monitoring-offline', {
mailNum: 3
})
%>
<%= monitoringFooter() %>
<%= footer() %>

View file

@ -0,0 +1 @@
Dein Knoten <%- node.hostname %> ist weiterhin offline

View file

@ -0,0 +1,29 @@
<%= header() %>
<p>
Dein Knoten ist wieder online.
</p>
<table width="100%" border="0" cellspacing="0" cellpadding="0" style="margin-top: 45px; margin-bottom: 45px;">
<tr>
<td align="center">
<table class="table" style="border: 3px dashed #666666; padding: 10px; background-color: #F5F5F5; font-size: 1.3em;">
<tr>
<th>Knoten</th>
<td><%- node.hostname %></td>
</tr>
<tr>
<th>Wieder online seit</th>
<td><%= formatDateTime(lastSeen) %></td>
</tr>
</table>
</td>
</tr>
</table>
<p></p>
<%= monitoringFooter() %>
<%= footer() %>

View file

@ -0,0 +1 @@
Dein Knoten <%- node.hostname %> ist wieder online

View file

@ -0,0 +1,6 @@
</td>
</tr>
</table>
</body>
</html>

View file

@ -0,0 +1,31 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type="text/css">
body {
margin: 0;
padding: 0;
}
th {
font-weight: bold;
text-align: left;
padding-right: 10px;
}
em {
font-size: 0.9em;
}
</style>
</head>
<body>
<table border="0" cellpadding="10" cellspacing="0" bgcolor="#EDEDED" width="100%">
<tr>
<td style="color: #444444; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, sans-serif;">
<p>
<strong style="font-size: 1.5em;">Hallo <%- node.nickname %>,</strong>
</p>

View file

@ -0,0 +1,32 @@
<p>
Bei Fragen wende Dich gerne an
<%= link('mailto:' + community.contactEmail, community.contactEmail) %>
</p>
<p>
<strong>
Viele Grüße<br />
Dein <%- community.name %>
</strong>
</p>
<%= hr() %>
<p>
<em>
Möchtest Du keine Status-E-Mails zu Diesem Knoten mehr erhalten, so kannst Du den Versand
jederzeit <%= link(disableUrl, 'deaktivieren') %>.
</em>
</p>
<p>
<em>
Alternativ kannst Du die Versandeinstellungen auch jederzeit unter
<%= link(editNodeUrl, editNodeUrl) %> ändern.
</em>
</p>
<p>
<em>
Bitte habe Verständnis dafür, dass das An- und Abschalten des Versands für jeden Deiner Knoten
einzeln erfolgt.
</em>
</p>

View file

@ -0,0 +1,23 @@
<p>
Dein Knoten ist <% if (mailNum === 1) { %>akutell<% } else { %>weiterhin<% } %> offline.
</p>
<table width="100%" border="0" cellspacing="0" cellpadding="0" style="margin-top: 45px; margin-bottom: 45px;">
<tr>
<td align="center">
<table class="table" style="border: 3px dashed #666666; padding: 10px; background-color: #F5F5F5; font-size: 1.3em;">
<tr>
<th>Knoten</th>
<td><%- node.hostname %></td>
</tr>
<tr>
<th>Zuletzt online</th>
<td><%= formatFromNow(lastSeen) %> (<%= formatDateTime(lastSeen) %>)</td>
</tr>
</table>
</td>
</tr>
</table>
<p></p>

View file

@ -8,9 +8,64 @@ angular.module('ffffng')
async, async,
deepExtend, deepExtend,
fs, fs,
moment,
Logger Logger
) { ) {
var templateBasePath = __dirname + '/../mailTemplates'; var templateBasePath = __dirname + '/../mailTemplates';
var snippetsBasePath = templateBasePath + '/snippets';
var templateFunctions = {};
function renderSnippet(name, data) {
var snippetFile = snippetsBasePath + '/' + name + '.html';
return _.template(fs.readFileSync(snippetFile).toString())(deepExtend(
{},
this, // parent data
data,
templateFunctions
));
}
function snippet(name) {
return function (data) {
return renderSnippet.bind(this)(name, data);
}
}
function renderLink(href, text) {
return _.template(
'<a href="<%- href %>" style="color: #E5287A;"><%- text %></a>'
)({
href: href,
text: text || href
});
}
function renderHR() {
return '<hr style="border-top: 1px solid #333333; border-left: 0; border-right: 0; border-bottom: 0;" />';
}
function formatDateTime(unix) {
return moment.unix(unix).locale('de').local().format('DD.MM.YYYY HH:mm');
}
function formatFromNow(unix) {
return moment.unix(unix).locale('de').fromNow();
}
templateFunctions.header = snippet('header');
templateFunctions.footer = snippet('footer');
templateFunctions.monitoringFooter = snippet('monitoring-footer');
templateFunctions.snippet = renderSnippet;
templateFunctions.link = renderLink;
templateFunctions.hr = renderHR;
templateFunctions.formatDateTime = formatDateTime;
templateFunctions.formatFromNow = formatFromNow;
return { return {
configureTransporter: function (transporter) { configureTransporter: function (transporter) {
@ -38,7 +93,8 @@ angular.module('ffffng')
{ {
community: config.client.community, community: config.client.community,
editNodeUrl: UrlBuilder.editNodeUrl() editNodeUrl: UrlBuilder.editNodeUrl()
} },
templateFunctions
); );
function render(field) { function render(field) {