Vulcan/packages/vulcan-email/lib/server/email.js

109 lines
3.3 KiB
JavaScript
Raw Normal View History

2017-03-24 10:35:19 +09:00
import VulcanEmail from '../namespace.js';
import Juice from 'juice';
import htmlToText from 'html-to-text';
import Handlebars from 'handlebars';
2017-03-23 16:27:59 +09:00
import { Utils, getSetting } from 'meteor/vulcan:lib'; // import from vulcan:lib because vulcan:core is not loaded yet
2017-03-24 10:35:19 +09:00
VulcanEmail.templates = {};
2017-03-24 10:35:19 +09:00
VulcanEmail.addTemplates = templates => {
_.extend(VulcanEmail.templates, templates);
};
2017-03-24 10:35:19 +09:00
VulcanEmail.getTemplate = templateName => Handlebars.compile(
VulcanEmail.templates[templateName],
{ noEscape: true}
);
2017-03-24 10:35:19 +09:00
VulcanEmail.buildTemplate = (htmlContent, optionalProperties = {}) => {
const emailProperties = {
2016-12-12 15:00:56 +09:00
secondaryColor: getSetting('secondaryColor', '#444444'),
accentColor: getSetting('accentColor', '#DD3416'),
2017-03-24 10:35:19 +09:00
siteName: getSetting('title', 'My App'),
2016-12-12 15:00:56 +09:00
tagline: getSetting('tagline'),
2016-12-12 11:34:28 +09:00
siteUrl: Utils.getSiteUrl(),
body: htmlContent,
unsubscribe: '',
2016-12-12 11:34:28 +09:00
accountLink: Utils.getSiteUrl()+'account',
2016-12-12 15:00:56 +09:00
footer: getSetting('emailFooter'),
logoUrl: getSetting('logoUrl'),
logoHeight: getSetting('logoHeight'),
logoWidth: getSetting('logoWidth'),
...optionalProperties
};
2017-03-24 10:35:19 +09:00
const emailHTML = VulcanEmail.getTemplate("wrapper")(emailProperties);
const inlinedHTML = Juice(emailHTML, {preserveMediaQueries: true});
const doctype = '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">'
return doctype+inlinedHTML;
};
2017-03-24 10:35:19 +09:00
VulcanEmail.send = (to, subject, html, text) => {
// TODO: limit who can send emails
// TODO: fix this error: Error: getaddrinfo ENOTFOUND
const from = getSetting('defaultEmail', 'noreply@example.com');
const siteName = getSetting('title', 'Vulcan');
subject = '['+siteName+'] '+subject;
if (typeof text === 'undefined'){
// Auto-generate text version if it doesn't exist. Has bugs, but should be good enough.
text = htmlToText.fromString(html, {
wordwrap: 130
});
}
const email = {
from: from,
to: to,
subject: subject,
text: text,
html: html
};
if (process.env.NODE_ENV === 'production' || getSetting('enableDevelopmentEmails', false)) {
console.log('//////// sending email…'); // eslint-disable-line
console.log('from: '+from); // eslint-disable-line
console.log('to: '+to); // eslint-disable-line
console.log('subject: '+subject); // eslint-disable-line
// console.log('html: '+html);
// console.log('text: '+text);
try {
Email.send(email);
} catch (error) {
console.log("// error while sending email:"); // eslint-disable-line
console.log(error); // eslint-disable-line
}
} else {
console.log('//////// sending email (simulation)…'); // eslint-disable-line
console.log('from: '+from); // eslint-disable-line
console.log('to: '+to); // eslint-disable-line
console.log('subject: '+subject); // eslint-disable-line
console.log('Note: emails turned off in development mode. Set "enableDevelopmentEmails" setting to "true" to enable.');
}
return email;
};
2017-03-24 10:35:19 +09:00
VulcanEmail.buildAndSend = (to, subject, template, properties) => {
const html = VulcanEmail.buildTemplate(VulcanEmail.getTemplate(template)(properties));
return VulcanEmail.send (to, subject, html);
};
2017-03-24 10:35:19 +09:00
VulcanEmail.buildAndSendHTML = (to, subject, html) => VulcanEmail.send(
to,
subject,
2017-03-24 10:35:19 +09:00
VulcanEmail.buildTemplate(html)
);