function render(callback) { const salesStats = Immutable.fromJS( JSON.parse( fs.readFileSync(__dirname + '/../data/sales_stats.json', { encoding: 'utf8' }) ).map(parseFloat) ); const css = fs.readFileSync(__dirname + '/styles.css', { encoding: 'utf8' }); const html = juice.inlineContent( ReactDOMServer.renderToStaticMarkup(<DigestEmail salesStats={salesStats}/>), css ); const document = jsdom(html); const svg = document.querySelector('svg'); let pngData; exec(`echo '${svg.outerHTML}' | rsvg-convert | base64`, (err, stdout, stderr) => { pngData = stdout; let img = document.createElement('img'); img.src = 'cid:salessparkline'; svg.parentNode.replaceChild(img, svg); callback(document.querySelector('html').outerHTML, [ { type: 'image/png', name: 'salessparkline', content: pngData, } ]); }); }
requestResource.get('https://www.synapse.org/Portal.css', function (error, resourceResponse, resourceBody) { if (!error && resourceResponse.statusCode == 200) { var css = resourceBody; var inlinedStyledHtml = juice.inlineContent(resultHtml, css); response.end(JSON.stringify({ result: inlinedStyledHtml })); } });
dust.render(compileid, message.Parameters, function(errRendered, outRendered) { if(errRendered) { logger.error("Error in rendering "+ errRendered); } else { var renderedTemplate=""; var juiceOptions={ applyStyleTags :true } if(resPickTemp.styles.length>0) { for(var i=0;i<resPickTemp.styles.length;i++) { if (i == 0) { renderedTemplate = outRendered; } //console.log(resPickTemp.styles[i].content); logger.info("Rendering is success "+ resPickTemp.styles[i].content); renderedTemplate=juice.inlineContent(renderedTemplate, resPickTemp.styles[i].content, juiceOptions); if(i==(resPickTemp.styles.length-1)) { mailOptions.text = renderedTemplate; SendRequest(company,tenant,mailOptions,function(done){ if(!done) ack.reject(true); else ack.acknowledge(); }); } } } else { console.log("Rendering Done"); mailOptions.text = outRendered; SendRequest(company,tenant,mailOptions,function(done){ if(!done) ack.reject(true); else ack.acknowledge(); }); } } });
dust.render(compileid, data.message.Parameters, function (errRendered, outRendered) { if (errRendered) { logger.error("Error in rendering " + errRendered); } else { var renderedTemplate = ""; var juiceOptions = { applyStyleTags: true } if (resPickTemp.styles.length > 0) { for (var i = 0; i < resPickTemp.styles.length; i++) { if (i == 0) { renderedTemplate = outRendered; } //console.log(resPickTemp.styles[i].content); logger.info("Rendering is success " + resPickTemp.styles[i].content); renderedTemplate = juice.inlineContent(renderedTemplate, resPickTemp.styles[i].content, juiceOptions); if (i == (resPickTemp.styles.length - 1)) { if (resPickTemp.filetype.toLowerCase() == 'html') { mailOptions.html = renderedTemplate; } else { mailOptions.text = renderedTemplate; } } } } else { console.log("Rendering Done"); if (resPickTemp.filetype.toLowerCase() == 'html') { mailOptions.html = outRendered; } else { mailOptions.text = outRendered; } //SendMail(mailOptions, data); } if (resPickTemp.content.subject) { var compilesubid = uuid.v4(); var compiledsub = dust.compile(resPickTemp.content.subject, compilesubid); dust.loadSource(compiledsub); dust.render(compilesubid, data.message.Parameters, function (errsubRendered, outsubRendered) { mailOptions.subject = outsubRendered; SendMail(mailOptions, data); }); } else { SendMail(mailOptions, data); } } });
export function send(to, template, data, options = {}) { if (!(template in cachedTemplates)) { const dir = path.join(templateDir, template); const templateFuncs = { html: compileTemplate(path.join(dir, 'html')), text: compileTemplate(path.join(dir, 'text')), subject: compileTemplate(path.join(dir, 'subject')), style: compileStyle(path.join(dir, 'style')), styleTag: compileStyle(path.join(dir, 'styleTag')), }; cachedTemplates[template] = templateFuncs; } const tpl = cachedTemplates[template]; const tplData = _.assign( { config, moment, _, style: tpl.styleTag, email: to, }, data ); const html = juice .inlineContent(tpl.html(tplData), tpl.style) .replace(/class="([^"]+)"/g, 'class="$1" summary="$1"'); // Duplicate all classes in title tags for use in CSS // selectors (Gmail strips classes) const text = wrap(tpl.text(tplData)); const subject = tpl.subject(tplData).trim(); return sendMail( Object.assign( { to, subject, text, html, }, options ) ); }
.then((results) => { let [html, style] = results if (!style) return html if (this.options.juiceOptions) { debug('Using juice options ', this.options.juiceOptions) } let rendered = juice.inlineContent(html, style, this.options.juiceOptions || {}) // inline style into rendered html var $ = cheerio.load(rendered); var $appendTo = null; if (this.options.juiceOptions.insertPreservedExtraCss !== true) { $appendTo = $(options.insertPreservedExtraCss) } else { $appendTo = $('head') if (!$appendTo.length) $appendTo = $('body') if (!$appendTo.length) $appendTo = $.root() } $appendTo.first().append('<style>' + style + '</style>') return $.html() })
function compileTemplate(templatePath, css) { var html = jade.renderFile(templatePath, {}); var compiled = juice.inlineContent(html, css, { }) return compiled; };
export const inlinecss = (html) => juice.inlineContent(html, Settings.get('email_style'));
selectorsWithUrls.forEach(function (elem, idx) { console.log('inline styles', selectorsWithUrls[idx]); editedFileContent = juice.inlineContent(editedFileContent, selectorsWithUrls[idx], {xmlMode: true}); });