
Bạn đã bao giờ cần gửi email từ ứng dụng Node.js mà không muốn tốn hàng giờ để setup chưa? Với Nodemailer, bạn có thể làm điều đó chỉ trong 3 phút! Hôm nay, mình sẽ chia sẻ cách sử dụng tính năng này để tiết kiệm thời gian và nâng cấp dự án của bạn.
Nodemailer là gì và tại sao bạn cần nó?
Nodemailer là một thư viện mạnh mẽ trong Node.js giúp gửi email một cách dễ dàng qua SMTP hoặc các dịch vụ email phổ biến như Gmail. Nó đơn giản hóa việc gửi thông báo, xác nhận tài khoản, hay thậm chí là email tiếp thị trực tiếp từ code của bạn.
Cách hoạt động ra sao?
Nodemailer hoạt động bằng cách thiết lập một “transporter” (trình vận chuyển) để kết nối với dịch vụ email, sau đó gửi nội dung qua hàm sendMail. Ví dụ, bạn muốn gửi email xác nhận đăng ký cho người dùng: chỉ cần cấu hình thông tin SMTP (như Gmail) và thêm nội dung email. Code rất trực quan, chỉ vài dòng là xong!
Lợi ích là gì?
Bạn không cần server mail phức tạp, tích hợp nhanh chóng, và hỗ trợ nhiều dịch vụ email. Điều này cực kỳ hữu ích cho các dự án nhỏ hay startup muốn tối ưu chi phí.
Hướng dẫn nhanh
- Cài đặt các package cần thiết
1 2 |
npm i express nodemailer dotenv npm i -D @types/nodemailer |
- Tạo file utils/mail.ts với nội dung
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import nodemailer from 'nodemailer' import Mail from 'nodemailer/lib/mailer' import { EMAIL_HOST, EMAIL_PASSWORD, EMAIL_USERNAME } from '../config' const transporter = nodemailer.createTransport({ host: EMAIL_HOST, port: 587, secure: false, auth: { user: EMAIL_USERNAME, pass: EMAIL_PASSWORD } }) export const sendEmail = async ({ from, to, subject, text, html }: Mail.Options) => { try { const info = await transporter.sendMail({ from, to, subject, text, html }) console.log('Email sent: ' + info.response) return info } catch (error) { console.error('Error sending email: ', error) } } |
- Ở đây mình sẽ dùng tài khoản Google để gửi mail nên EMAIL_HOST=smtp.gmail.com, EMAIL_USERNAME là gmail của bạn ví dụ: example@gmail.com
- Truy cập vào Đặt Mật Khẩu Ứng Dụng Google để lấy thông tin EMAIL_PASSWORD

- Lưu ý tài khoản google phải được xác minh 2 bước mới có thể tạo mật khẩu ứng dụng. Truy cập Quản lí Tài khoản Google của bạn để xác thực

- Tạo file controllers/MailController.ts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import { NextFunction, Request, Response } from 'express' import { sendEmail } from './../utils/mail' import { EMAIL_TO } from '../config' async function send(req: Request, res: Response, next: NextFunction) { try { const from = req.body.from || 'WebService247' const to = req.body.to || EMAIL_TO const subject = req.body.subject || 'Subject' const content = req.body.content || 'Hello world' const result = await sendEmail({ from, to, subject, text: content }) if (result) { res.status(200).json({ message: 'Email sent successfully' }) } else { res.status(500).json({ message: 'Email sent failed' }) } } catch (error) { next(error) } } export const MailController = { send } |
- Tạo file rest/mail.rest để gửi request với REST Client extension
1 2 3 |
### send mail POST http://localhost:3000/api/mails/send |
- Sau khi upload kết quả trả về như ảnh
