Skip to content

Instantly share code, notes, and snippets.

@dangvanduc90
Last active January 23, 2019 18:11
Show Gist options
  • Save dangvanduc90/213ea47cefc3beeef322df1811f7c455 to your computer and use it in GitHub Desktop.
Save dangvanduc90/213ea47cefc3beeef322df1811f7c455 to your computer and use it in GitHub Desktop.
var express = require('express') // sử dụng framework express cho nodejs
var app = express()
var bodyParser = require('body-parser') // parsing middleware
var cors = require('cors') // enable cors
import nodemailer from 'nodemailer' // package send email
var kue = require('kue') // package job queue
// config app
app.use(bodyParser.urlencoded({ extended: true }))
app.use(bodyParser.json())
app.use(cors())
// init server nodemailer (các bạn có thể sửng dụng gmail để gửi)
let transporter = nodemailer.createTransport({
host: "smtp.example.com", // các bạn điền thông số vào đây
port: 587, // các bạn điền thông số vào đây
secure: false, // các bạn điền thông số vào đây
auth: { // các bạn điền thông số vào đây
user: "username", // các bạn điền thông số vào đây
pass: "password" // các bạn điền thông số vào đây
}, // các bạn điền thông số vào đây
tls: { // các bạn điền thông số vào đây
secure: true, // các bạn điền thông số vào đây
} // các bạn điền thông số vào đây
});
// Actual function executed
const sendEmail = (job, done) => {
emailSender(job.data.name, job.data.to).then((success) => {
done(); // báo về queue là job đã done
})
.catch((err) => {
console.log(err) // todo log err
});
};
// config mail
const emailSender = (name, to) => {
let mailOptions = {
sender: name, // tên người nhận
to: to, // tên người gửi
from: `Test Email Queue naz`, // tên người
subject: 'Kue Worker Email Testing', // tiêu đề mail
replyTo: '[email protected]',
};
return transporter.sendMail(mailOptions)
};
// init job queue send email with redis database
// thông tin về queue sẽ được lưu vào redis nếu thiết lập thông số sau
var queue = kue.createQueue({
redis: { // các bạn có thể xóa dòng này nếu không thiết lập redis
host: 'localhost', // các bạn có thể xóa dòng này nếu không thiết lập redis
port: 6379 // các bạn có thể xóa dòng này nếu không thiết lập redis
} // các bạn có thể xóa dòng này nếu không thiết lập redis
});
// config queue
queue.create('email', {
title: 'welcome email for tj', // tiêu đề mail
name: 'dangvanduc902', // tên người nhận
to: '[email protected]' // mail người nhận
}).attempts(5).save(); // số lần thử lại nếu job queue fail
// PHP sẽ nhận được kết quả ngay lập tức nhưng bạn sẽ thấy 10s sau email mới về inbox của bạn
app.post('/send_email', function (req, res) {
queue.process('email', function (job, done) {
setTimeout(function () { // fake email delay
sendEmail(job, done);
}, 10000)
})
res.json({ "name": "dangvanduc90" }) // return some data
})
app.listen(3000)
console.log('Server start at: http://localhost:3000/')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment