【问题标题】:How to send an html page as email in nodejs如何在nodejs中将html页面作为电子邮件发送
【发布时间】:2014-03-06 10:01:08
【问题描述】:

我最近开始编写我的第一个 node.js。我无法从节点中找到任何能够将 html 页面作为电子邮件发送的模块。请帮忙,谢谢!

【问题讨论】:

    标签: node.js express html-email


    【解决方案1】:

    您可以使用nodemailernodemailer-express-handlebars 模块执行此操作:

    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
    }));
    

    在路由器帖子中你可以使用:

    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}}
    

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

    【讨论】:

    • 有必要只给 extName .hbs 吗?我可以使用 .html 吗?
    • 可以使用engine模板的语法来显示.html中的变量
    • 我正在使用 html 视图引擎。无法访问 html 文件中的上下文变量。我该怎么办?
    • 我通过了这样的上下文:{name : 'myname'}
    • 我如何使用名称?在html中
    【解决方案2】:

    我一直在使用这个模块:https://github.com/andris9/Nodemailer

    更新示例(使用 express 和 nodemailer),包括从文件系统获取 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!");
          });
        }
      });
    };
    

    我可能会将邮件程序部分移至其自己的模块,但我将所有内容都包含在此处,以便您可以一起查看。

    【讨论】:

    • 我也用过但是不能发送复杂的模板
    • 复杂的模板是什么意思?只要你的模板被编译成一个字符串,我看不出它为什么不起作用。
    • 太棒了,你的例子效果很好。这很容易理解。再次,非常感谢!
    • 我们如何设置 src= 为 '' .我想我们会将文件 smiley.gif 附加到电子邮件中。那正确吗?。有示例代码吗?谢谢!
    • 很好,但是如何在用户邮件中加载我的自定义 css 和图像......他们没有加载:((
    猜你喜欢
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 2017-01-19
    • 2014-01-05
    • 2015-04-22
    相关资源
    最近更新 更多