如何在html文件中通过节点js传递variables来发送邮件

我是新的node.js.By使用此代码,我能够收到电子邮件。 我不知道如何将该“名称”variables传递给html,并在电子邮件中获取该variables的值。 错误是:发送后无法设置标题。 app.js文件

mailer.extend(app, { from: 'mail@mail.com', host: 'smtp.gmail.com', // hostname secureConnection: true, // use SSL port: 465, // port for secure SMTP transportMethod: 'SMTP', // default is SMTP. Accepts anything that nodemailer accepts auth: { user: 'xxxxxxx', pass: 'xxxxxxx' } }); app.engine('html', cons.swig) app.set('views', __dirname + '/views'); app.set('view engine', 'html'); 

Rout.js文件

 app.post("/registration", function(req, res) { res.render('register', { name: firstName }); app.mailer.send('register', { to: email, // REQUIRED. This can be a comma delimited string just like a normal email to field. subject: 'Test Email', // REQUIRED. otherProperty: 'Other Property' // All additional properties are also passed to the template as local variables. }, function (err) { if (err) { console.log(err); res.send('There was an error sending the email'); return; } res.send({"code":1,"message":"Regestration Successfully."}); res.end(); }); 

register.html文件

 <body> Dear {{ name }} </body> 

您可以阅读html文件并应用一个stringreplace,假设有一个像{{name}}这样的静态“标志”

js代码:

 const _fs = require('fs'); const _path = require('path'); var composeWithBasicTemplate = function (emailData, next) { var path = _path.join(__dirname, "email_templates/"); _fs.readFile(path + 'basic.html', 'utf8', function (err, data) { if (err) { _console.log(err, 'error'); return null; }; data = data.replace('{TITLE}', emailData.ComposedTitle); data = data.replace('{TITLE}', emailData.ComposedTitle); data = data.replace('{BODY}', emailData.ComposedBody); data = data.replace('{URLACTION}', emailData.ComposedUrlAction); data = data.replace('{TEXTACTION}', emailData.ComposedTextAction); data = data.replace('{COPYRIGHTDATE}', (new Date()).getFullYear()); next(data); }); } 

html文件:

 ... <table width="100%" cellpadding="0" cellspacing="0" style="font-family: 'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0; padding: 0;"> <tr style="font-family: 'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0; padding: 0;"> <td class="content-block" style="font-family: 'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 22px; text-align:center; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top"> {TITLE} </td> </tr> <tr style="font-family: 'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0; padding: 0;"> <td class="content-block" style="font-family: 'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; text-align:center; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top"> {BODY} </td> </tr> <tr style="font-family: 'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0; padding: 0;"> <td class="content-block" style="font-family: 'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; text-align:center; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top"> <a href="{URLACTION}" class="btn-primary" style="font-family: 'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; color: #fff; text-decoration: none; line-height: 2; font-weight: bold; text-align: center; cursor: pointer; display: inline-block; border-radius: 0px; text-transform: capitalize; background: #d9534f; margin: 0; padding: 0; border-color: #d9534f; border-style: solid; border-width: 10px 20px;">{TEXTACTION}</a> </td> </tr> <tr style="font-family: 'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0; padding: 0;"> <td class="content-block" style="font-family: 'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px; text-align:center;"> <br /><br /> <p class="MsoNormal" align="center"><a href="{URLCONFIG}"><img src="{URLCONFIG}/content/img/Home/LARNIA_logo.png" width="280" /></a></p> </td> </tr> </table> ... 

你设置app.set('views', __dirname + '/views'); 所以请确保该目录中存在html文件,variables模板的语法是<%=name%> ,例如:

 <body> Dear<%= name %> </body> 

首先我会尝试Octavio的build议。

我个人使用React或express-handlebars来获取数据到页面上。 如果你将这个特定的数据保存在数据库中,你可以使用ajax调用,或者如果你不想处理导入整个jquery库,只需要获取axios包。

我会说检查这些来源了更多的信息。

  • Express-Handlebars使用指南 – 这个例子中最有价值的部分就是这个例子。 向下滚动以获取如何获取它的说明,或者下载示例文件夹。

  • Express-Handlebars NPM

  • 应对

看起来你已经在使用express了,所以express-handlebars可能是最快的方法。