How to send an html page as email in nodejs

后端 未结 2 1434
Happy的楠姐
Happy的楠姐 2020-12-01 10:01

I recently started programming my first node.js. I can\'t find any modules from node that is able to send html page as email. please help, thanks!

2条回答
  •  余生分开走
    2020-12-01 10:25

    I have been using this module: https://github.com/andris9/Nodemailer

    Updated example(using express and nodemailer) that includes getting index.jade template from the file system and sending it as an email:

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

    I'd probably move the mailer part to its own module but I included everything here so you can see it all together.

提交回复
热议问题