Node.js 如何在nodejs中以电子邮件形式发送html页面

Node.js 如何在nodejs中以电子邮件形式发送html页面,node.js,express,html-email,Node.js,Express,Html Email,我最近开始编写我的第一个node.js。我在节点中找不到任何能够以电子邮件形式发送html页面的模块。请帮忙,谢谢 我一直在使用这个模块: 更新示例(使用express和NodeEmailer),包括从文件系统获取index.jade模板并将其作为电子邮件发送: var _jade = require('jade'); var fs = require('fs'); var nodemailer = require("nodemailer"); var FROM_ADDRESS = 'foo

我最近开始编写我的第一个node.js。我在节点中找不到任何能够以电子邮件形式发送html页面的模块。请帮忙,谢谢

我一直在使用这个模块:

更新示例(使用express和NodeEmailer),包括从文件系统获取index.jade模板并将其作为电子邮件发送:

var _jade = require('jade');
var fs = require('fs');

var nodemailer = require("nodemailer");

var FROM_ADDRESS = 'foo@bar.com';
var TO_ADDRESS = 'test@test.com';

// create reusable transport method (opens pool of SMTP connections)
var smtpTransport = nodemailer.createTransport("SMTP",{
    service: "Gmail",
    auth: {
        user: "bar@foo.com",
        pass: "PASSWORD"
    }
});

var sendMail = function(toAddress, subject, content, next){
  var mailOptions = {
    from: "SENDERS NAME <" + FROM_ADDRESS + ">",
    to: toAddress,
    replyTo: fromAddress,
    subject: subject,
    html: content
  };

  smtpTransport.sendMail(mailOptions, next);
}; 

exports.index = function(req, res){
  // res.render('index', { title: 'Express' });

  // specify jade template to load
  var template = process.cwd() + '/views/index.jade';

  // get template from file system
  fs.readFile(template, 'utf8', function(err, file){
    if(err){
      //handle errors
      console.log('ERROR!');
      return res.send('ERROR!');
    }
    else {
      //compile jade template into function
      var compiledTmpl = _jade.compile(file, {filename: template});
      // set context to be used in template
      var context = {title: 'Express'};
      // get html back as a string with the context applied;
      var html = compiledTmpl(context);

      sendMail(TO_ADDRESS, 'test', html, function(err, response){
        if(err){
          console.log('ERROR!');
          return res.send('ERROR');
        }
        res.send("Email sent!");
      });
    }
  });
};
var_jade=require('jade');
var fs=需要('fs');
var nodeEmailer=require(“nodeEmailer”);
var FROM_ADDRESS='1〕foo@bar.com';
var TO_地址=test@test.com';
//创建可重用传输方法(打开SMTP连接池)
var smtpTransport=nodemailer.createTransport(“SMTP”{
服务:“Gmail”,
认证:{
用户:“bar@foo.com",
通行证:“密码”
}
});
var sendMail=函数(地址、主题、内容、下一步){
var mailpoptions={
发件人:“发件人名称”,
致:致地址:,
答复:发件人地址:,
主题:主题,,
html:内容
};
发送邮件(邮件选项,下一步);
}; 
exports.index=函数(请求、恢复){
//res.render('index',{title:'Express'});
//指定要加载的模板
var template=process.cwd()+'/views/index.jade';
//从文件系统获取模板
readFile(模板'utf8',函数(err,file){
如果(错误){
//处理错误
console.log('ERROR!');
返回res.send('ERROR!');
}
否则{
//将jade模板编译为函数
var compiledTmpl=_jade.compile(文件,{filename:template});
//设置要在模板中使用的上下文
var context={title:'Express'};
//将html作为应用了上下文的字符串返回;
var html=compiledTmpl(上下文);
sendMail(收件人地址,'test',html,函数(err,response){
如果(错误){
console.log('ERROR!');
返回res.send('ERROR');
}
res.send(“电子邮件已发送!”);
});
}
});
};

我可能会将mailer部分移动到它自己的模块中,但我在这里包含了所有内容,以便您可以一起查看。

您可以使用
NodeEmailr
NodeEmailr express Handlebar
模块执行以下操作:

var nodemailer = require('nodemailer');
var mailerhbs = require('nodemailer-express-handlebars');

var mailer = nodemailer.createTransport({
    service: Gmail,  // More at https://nodemailer.com/smtp/well-known/#supported-services
    auth: {
        user: [USERNAME@gmail.com], // Your email id
        pass: [PASSWORD] // Your password
    }
});

mailer.use('compile', mailerhbs({
    viewPath: 'templates/default/emails', //Path to email template folder
    extName: '.hbs' //extendtion of email template
}));
在路由器post中,您可以使用:

mailer.sendMail({
            from: 'Your name username@domain.com',
            to: user.local.email,
            subject: 'Reset your password',
            template: 'password_reset', //Name email file template
            context: { // pass variables to template
                hostUrl: req.headers.host,
                customeName: user.info.firstname + ' ' + user.info.lastname,
                resetUrl: req.headers.host + '/users/recover/' + token,
                resetCode: token
            }
        }, function (err, response) {
            if (err) {
                res.send('Error send email, please contact administrator to best support.');
            }
            res.send('Email send successed to you email' + req.body.email + '.');
            done(err, 'done');
        });
在hbs模板中,您可以使用变量:

{{var from context}}

希望代码块对您有所帮助。

我也使用过它,但它不能发送复杂的模板。您所说的复杂模板是什么意思?只要你的模板被编译成一个字符串,我就不明白为什么它不起作用。太棒了,你的例子太棒了。这很容易理解。再次感谢你!如何为“”设置src=。我想我们会将文件smiley.gif附加到电子邮件中。是这样吗?。您有示例代码吗?谢谢!这很好,但是如何在用户邮件中加载我的自定义css和图像。。。他们没有加载:((必须只提供extName.hbs?我可以使用.html吗?您可以使用
引擎
模板的语法在
中显示变量。html
我使用的是html视图引擎。无法访问html文件中的上下文变量。我该怎么做?我像这样传递了上下文:{name:'myname'}。我如何在html中使用name?)