有些靜態頁面都用 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); });