使用 NodeMailer 寄送信,不用 PHP 也可以做到!

有些靜態頁面都用 Express 去 host,但是當我們前端不太熟悉 PHP 的時候,還真是有點頭大。

小編在找其他選擇的時候另外一個同事推薦小編使用 node 來寄信。這時小編非常驚訝!竟然可以這麼做,於是就 Google 了一下哪些套件,經過嚴選,覺得還是這個 NodeMailer 酷多了。於時在此後的專案都用 NodeMailer 寄信,只能說,實在太方便啦!!!

前提下,我們是使用 express + mustache template。若有 html 的需求,可詢問。

用到的 modules:

  • nodemailer
  • express
  • bodyparser
  • nodemailer-express-handlebars
//include all requirements
var nodemailer = require('nodemailer');
var express = require('express');
var mail = express();
var bodyParser = require('body-parser');
var mustache = require('nodemailer-express-handlebars');

以下的這個情況是當我使用 Mustache 為 Template 的時候,但是若要用 HTML 基本上也只要換一下將 render 那邊改掉,mustache_options 拿掉就可以了。

//express post request to receive datas
mail.post('/mail', function(req, res) {
    //to allow localhosts etc.
    res.header("Access-Control-Allow-Origin", "*");
    //to throw you a feedback
    res.status(200).json({
        hasError: false
    });
    console.log(req.body);
  
    //nodemailer settings needed to send emails
    var transporter = nodemailer.createTransport({
        service: 'Gmail',
        auth: {
            user: '[email protected]',
            pass: 'password'
        }
    });
  
    //mail settings
    var mail_options = {
        from: req.body.name + '<' + req.body.email + '>',
        to: '[email protected]',
        subject: 'From ' + req.body.name,
        template: 'email',
        context: req.body
    };
  
    //mustache settings
    var mustache_options = {
        viewEngine: {
            extname: '.mustache',
            layoutDir: 'mustache/email'
        },
        viewPath: 'mustache/email',
        extName: '.mustache'
    }
  
    //render mustache
    transporter.use('compile', mustache(mustache_options));
     
    //send the mail out
    transporter.sendMail(mail_options, function(error, info){
        if(error){
            return console.log(error);
        }
        console.log('Message sent: ' + info.response);
    });
});
  
//tell the node to listen on port 7000
var server = mail.listen(7000, function() {
    var host = server.address().address;
    var port = server.address().port;
    console.log('Mail is listening at http://%s:%s', host, port);
});
Click here