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