Bài 13: Gửi email trong Node.js với module Nodemailer
Trong Node.js, chúng ta có thể sử dụng module nodemailer để gửi email một cách dễ dàng. Việc gửi email thông qua Node.js là rất hữu ích cho các ứng dụng web và mobile, đặc biệt là các ứng dụng cần gửi email xác nhận hoặc thông báo cho người dùng.
Trong bài viết này, chúng ta sẽ tìm hiểu cách sử dụng module nodemailer để gửi email trong Node.js.
Nội dung của bài
Cài đặt nodemailer
Để sử dụng nodemailer, chúng ta cần cài đặt module này bằng npm:
npm install nodemailer
Sau khi cài đặt xong, ta có thể bắt đầu sử dụng nodemailer để gửi email.
Gửi email đơn giản với nodemailer
Để gửi email đơn giản với nodemailer, chúng ta cần tạo một đối tượng transporter và định nghĩa các thông tin cần thiết cho email, bao gồm địa chỉ email người gửi, địa chỉ email người nhận, tiêu đề email, và nội dung email.
Ví dụ:
const nodemailer = require('nodemailer');
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'your.email@gmail.com',
pass: 'your.password'
}
});
const mailOptions = {
from: 'your.email@gmail.com',
to: 'recipient.email@gmail.com',
subject: 'Test email',
text: 'This is a test email'
};
transporter.sendMail(mailOptions, function(error, info){
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
});
Trong ví dụ trên, chúng ta đã tạo một đối tượng transporter với thông tin tài khoản email người gửi. Sau đó, chúng ta định nghĩa các thông tin cần thiết cho email, bao gồm địa chỉ email người gửi, địa chỉ email người nhận, tiêu đề email, và nội dung email. Cuối cùng, chúng ta gửi email bằng cách sử dụng phương thức sendMail()
của đối tượng transporter.
Gửi email với tệp đính kèm
Để gửi email với tệp đính kèm, chúng ta chỉ cần thêm thông tin về tệp đính kèm vào đối tượng mailOptions
. Ví dụ:
const mailOptions = {
from: 'your.email@gmail.com',
to: 'recipient.email@gmail.com',
subject: 'Test email',
text: 'This is a test email',
attachments: [
{
filename: 'file.txt',
content: 'hello world!'
}
]
};
Trong ví dụ trên, chúng ta đã thêm thông tin về tệp đính kèm vào đối tượng mailOptions
. Tệp đính kèm có tên là file.txt
và nội dung là hello world!
.
Sử dụng OAuth2 để xác thực
Nếu bạn không muốn sử dụng mật khẩu để xác thực khi gửi email, bạn có thể sử dụng OAuth2 để xác thực. Để làm điều này, bạn cần thực hiện các bước sau:
- Tạo một ứng dụng Google OAuth2 để lấy thông tin xác thực.
- Cài đặt module google-auth-library để sử dụng OAuth2 trong Node.js:
Sử dụng Google OAuth2 để xác thực trong nodemailer. Ví dụ:
npm install google-auth-library
- Cài đặt module google-auth-library để sử dụng OAuth2 trong Node.js:
const {google} = require('googleapis');
const nodemailer = require('nodemailer');
const OAuth2 = google.auth.OAuth2;
const oauth2Client = new OAuth2(
'client_id',
'client_secret',
'https://developers.google.com/oauthplayground'
);
oauth2Client.setCredentials({
refresh_token: 'refresh_token'
});
const accessToken = oauth2Client.getAccessToken();
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
type: 'OAuth2',
user: 'your.email@gmail.com',
clientId: 'client_id',
clientSecret: 'client_secret',
refreshToken: 'refresh_token',
accessToken: accessToken
}
});
const mailOptions = {
from: 'your.email@gmail.com',
to: 'recipient.email@gmail.com',
subject: 'Test email',
text: 'This is a test email'
};
transporter.sendMail(mailOptions, function(error, info){
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
});
Trong ví dụ trên, chúng ta đã sử dụng Google OAuth2 để xác thực trong nodemailer. Đầu tiên, chúng ta tạo một đối tượng OAuth2 và đặt thông tin xác thực. Sau đó, chúng ta lấy mã truy cập từ đối tượng OAuth2 và đặt thông tin xác thực trong đối tượng auth của transporter.
Kết luận
Trong bài viết này, chúng ta đã tìm hiểu cách sử dụng nodemailer để gửi email trong Node.js. Chúng ta đã thấy cách gửi email đơn giản và có tệp đính kèm, cũng như cách sử dụng OAuth2 để xác thực. Nodemailer là một công cụ hữu ích cho các ứng dụng web và mobile, và chúng ta nên sử dụng nó để gửi email một cách dễ dàng và hiệu quả.