Use juice to prepare html messages
This commit is contained in:
parent
c031ea7747
commit
4f2d66c30c
8 changed files with 251 additions and 67 deletions
38
lib/tools.js
38
lib/tools.js
|
@ -4,6 +4,8 @@ let db = require('./db');
|
|||
let slugify = require('slugify');
|
||||
let Isemail = require('isemail');
|
||||
let urllib = require('url');
|
||||
let juice = require('juice');
|
||||
let jsdom = require('jsdom');
|
||||
|
||||
let blockedUsers = ['abuse', 'admin', 'billing', 'compliance', 'devnull', 'dns', 'ftp', 'hostmaster', 'inoc', 'ispfeedback', 'ispsupport', 'listrequest', 'list', 'maildaemon', 'noc', 'noreply', 'noreply', 'null', 'phish', 'phishing', 'postmaster', 'privacy', 'registrar', 'root', 'security', 'spam', 'support', 'sysadmin', 'tech', 'undisclosedrecipients', 'unsubscribe', 'usenet', 'uucp', 'webmaster', 'www'];
|
||||
|
||||
|
@ -16,7 +18,8 @@ module.exports = {
|
|||
updateMenu,
|
||||
validateEmail,
|
||||
formatMessage,
|
||||
getMessageLinks
|
||||
getMessageLinks,
|
||||
prepareHtml
|
||||
};
|
||||
|
||||
function toDbKey(key) {
|
||||
|
@ -178,3 +181,36 @@ function formatMessage(serviceUrl, campaign, list, subscription, message, filter
|
|||
return value ? filter(value) : match;
|
||||
});
|
||||
}
|
||||
|
||||
function prepareHtml(html, callback) {
|
||||
if (!(html || '').toString().trim()) {
|
||||
return callback(null, false);
|
||||
}
|
||||
|
||||
jsdom.env(html, (err, win) => {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
let head = win.document.querySelector('head');
|
||||
let hasCharsetTag = false;
|
||||
let metaTags = win.document.querySelectorAll('meta');
|
||||
if (metaTags) {
|
||||
for (let i = 0; i < metaTags.length; i++) {
|
||||
if (metaTags[i].hasAttribute('charset')) {
|
||||
metaTags[i].setAttribute('charset', 'utf-8');
|
||||
hasCharsetTag = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!hasCharsetTag) {
|
||||
let charsetTag = win.document.createElement('meta');
|
||||
charsetTag.setAttribute('charset', 'utf-8');
|
||||
head.appendChild(charsetTag);
|
||||
}
|
||||
let preparedHtml = '<!doctype html><html>' + win.document.documentElement.innerHTML + '</html>';
|
||||
|
||||
return callback(null, juice(preparedHtml));
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue