Nodemailer là một mô-đun Node.js cho phép bạn gửi email từ máy chủ của mình một cách dễ dàng. Cho dù bạn muốn giao tiếp với người dùng của mình hay chỉ thông báo cho chính mình khi có sự cố xảy ra, một trong những tùy chọn để làm như vậy là qua thư.
Có rất nhiều bài báo giải thích cách sử dụng Nodemailer ở dạng barebone, nhưng bài viết này không phải là một trong số đó. Ở đây, tôi sẽ chỉ ra phương pháp phổ biến nhất để gửi email từ chương trình phụ trợ Node.js của bạn bằng Nodemailer và Gmail.
Cách bắt đầu với Nodemailer
Đầu tiên, chúng ta cần thiết lập bảng soạn sẵn Node.js bằng Express. Để đảm bảo rằng bạn đã cài đặt Node và npm, bạn có thể chạy các lệnh sau:
node -v
npm -v
Nếu cả hai lệnh này đều hiển thị một phiên bản, bạn có thể sử dụng. Nếu không, hãy cài đặt những gì còn thiếu.
Tạo một thư mục cho dự án của bạn. Chúng tôi sẽ sử dụng gật đầu cung cấp dịch vụ .
mkdir nodemailerProject
Vào bên trong thư mục mới tạo và chạy
npm init
Điều này sẽ khởi tạo dự án của chúng tôi bằng pacakge.json tệp.
Tiếp theo, chúng ta sẽ cần cài đặt Express bằng cách sử dụng:
npm install express
Tùy thuộc vào tệp bạn đã trỏ đến làm điểm nhập của mình (mặc định là index.js), hãy mở tệp đó và dán mã sau:
const express = require('express')
const app = express()
const port = 3000
app.listen(port, () => {
console.log(`nodemailerProject is listening at https://localhost:${port}`)
})
Trên đây là những gì cần thiết để khởi động một máy chủ đơn giản bằng Express. Bạn có thể thấy rằng nó đang hoạt động bình thường bằng cách chạy:
node index.js
Cách cài đặt Nodemailer
Cài đặt gật đầu bằng lệnh sau:
npm install nodemailer
API của Nodemailer khá đơn giản và yêu cầu chúng tôi thực hiện những việc sau:
- Tạo Người vận chuyển đối tượng
- Tạo MailOptions Đối tượng
- Sử dụng Transporter.sendMail phương pháp
Để tạo một đối tượng vận chuyển, chúng ta thực hiện như sau:
let transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
type: 'OAuth2',
user: process.env.MAIL_USERNAME,
pass: process.env.MAIL_PASSWORD,
clientId: process.env.OAUTH_CLIENTID,
clientSecret: process.env.OAUTH_CLIENT_SECRET,
refreshToken: process.env.OAUTH_REFRESH_TOKEN
}
});
✋ Hãy chú ý, ngoài người dùng và các khóa vượt qua, là thông tin đăng nhập của riêng bạn cho tài khoản gmail của bạn, ba khóa khác cần được truy xuất sau khi thiết lập OAuth.
Như chúng tôi đã trình bày ở phần đầu của bài viết này, chúng tôi sẽ sử dụng Gmail cho nhu cầu gửi thư của mình. Như bạn có thể đoán, Gmail có mức độ bảo mật cao khi nói đến thư được gửi bằng / đến tài khoản của người dùng.
Có một số cách để chúng tôi có thể vượt qua trở ngại này (một số cách tốt hơn những cách khác) và chúng tôi sẽ chọn cách yêu cầu chúng tôi thiết lập dự án trong Google Cloud Platform . Chúng tôi cần làm điều đó để có thông tin đăng nhập cho bảo mật OAuth được bật bởi Gmail.
Nếu bạn muốn đọc thêm về sự phức tạp của việc sử dụng Gmail với gật đầu, hãy truy cập vào đây.
Các bước tiếp theo sẽ yêu cầu một số cấu hình thay vì viết mã, vì vậy hãy chuẩn bị tinh thần.
Cấu hình Google Cloud Platform
Nếu bạn chưa có tài khoản Google Cloud Platform, hãy đảm bảo thiết lập một tài khoản làm điều kiện tiên quyết. Khi bạn đã thiết lập xong, hãy tạo một dự án mới bằng cách nhấp vào trình đơn thả xuống ở góc trên bên trái.
Chọn tùy chọn Dự án Mới:
Trong cửa sổ tiếp theo, chúng ta sẽ phải đặt tên cho dự án của mình. Chọn bất cứ thứ gì bạn thích, nhưng chúng tôi sẽ tiếp tục với NodemailerProject Tên. Đối với thuộc tính vị trí, bạn có thể để nó là Không có tổ chức.
Có thể mất vài giây để thiết lập dự án, nhưng sau đó, bạn sẽ có thể thấy màn hình này:
Mở trình đơn điều hướng bằng cách nhấp vào ba đường đứt nét ở góc trên cùng bên trái và chọn API và dịch vụ:
Để có thể sử dụng Nodemailer và Gmail, chúng ta sẽ phải sử dụng OAuth2. Nếu bạn không quen với OAuth, thì đó là một giao thức để xác thực. Tôi sẽ không đi vào chi tiết cụ thể ở đây vì nó không cần thiết, nhưng nếu bạn muốn hiểu thêm về nó, hãy truy cập vào đây.
Trước tiên, chúng tôi sẽ phải định cấu hình Màn hình đồng ý OAuth của mình:
Nếu bạn không phải là thành viên G-Suite, tùy chọn duy nhất có sẵn sẽ là Bên ngoài cho Loại người dùng.
Sau khi nhấp vào tạo, màn hình tiếp theo yêu cầu chúng tôi điền thông tin của ứng dụng (máy chủ của chúng tôi):
Điền email của bạn vào trường email Hỗ trợ người dùng và cả trong trường Thông tin liên hệ của nhà phát triển. Nhấp vào Lưu và Tiếp tục sẽ đưa chúng ta đến giai đoạn Phạm vi của cấu hình này. Bỏ qua giai đoạn này, vì nó không liên quan đến chúng tôi và chuyển sang giai đoạn Người dùng thử nghiệm.
Tại đây, hãy thêm chính bạn làm người dùng và nhấp vào Lưu và tiếp tục.
Cách định cấu hình cài đặt OAuth của bạn
Trong giai đoạn này, chúng tôi sẽ tạo thông tin xác thực OAuth để sử dụng với Nodemailer. Đi tới tab Thông tin xác thực phía trên Màn hình chấp thuận OAuth. Nhấp vào dấu cộng (➕) có dòng chữ Tạo thông tin đăng nhập và chọn ID ứng dụng khách OAuth.
Trong trình đơn thả xuống Loại ứng dụng, chọn Ứng dụng web :
Trong URI chuyển hướng được ủy quyền , hãy nhớ thêm Sân chơi OAuth2 (https://developers.google.com/oauthplayground) vì chúng tôi sẽ sử dụng nó để lấy một trong các khóa đã được đề cập ở đầu bài viết này.
Sau khi nhấp vào tạo, bạn sẽ được hiển thị id khách hàng và bí mật khách hàng của mình. Giữ những thứ này cho riêng mình và không bao giờ để lộ chúng dưới bất kỳ hình thức, hình dạng hoặc hình thức nào .
Nhận mã làm mới OAuth của bạn
Để nhận mã làm mới, chúng tôi sẽ sử dụng trong đối tượng vận chuyển trong Nodemailer, chúng tôi cần đi đến Sân chơi OAuth2. Chúng tôi đã phê duyệt URI này cho mục đích cụ thể này trong giai đoạn trước đó.
1. Nhấp vào biểu tượng bánh răng ở bên phải (là Cấu hình OAuth2) và chọn hộp kiểm để sử dụng Thông tin đăng nhập OAuth2 của riêng bạn:
2. Nhìn sang phía bên trái của trang web và bạn sẽ thấy danh sách các dịch vụ. Cuộn xuống cho đến khi bạn thấy API Gmail v1.
3. Nhấp vào Ủy quyền API
Bạn sẽ thấy một màn hình để đăng nhập vào bất kỳ tài khoản Gmail nào của mình. Chọn một người bạn đã liệt kê là Người dùng thử nghiệm.
4. Màn hình tiếp theo sẽ cho bạn biết rằng Google vẫn chưa xác minh ứng dụng này, nhưng điều này không sao vì chúng tôi chưa gửi nó để xác minh. Nhấp vào tiếp tục.
5. Trong màn hình tiếp theo, bạn sẽ được yêu cầu cấp quyền cho dự án của bạn để tương tác với tài khoản gmail của bạn. Làm như vậy.
6. Sau khi hoàn tất, bạn sẽ được chuyển hướng trở lại Sân chơi OAuth và bạn có thể thấy rằng có mã ủy quyền trong menu bên trái. Nhấp vào nút màu xanh lam có nhãn Mã ủy quyền trao đổi lấy mã thông báo .
Các trường cho mã thông báo làm mới và mã thông báo truy cập bây giờ sẽ được điền.
Quay lại Máy chủ
Sau khi thực hiện tất cả các cấu hình đó, chúng ta có thể quay lại ứng dụng của mình và nhập tất cả dữ liệu đó vào quá trình tạo bộ vận chuyển. Để giữ tất cả thông tin đăng nhập của bạn ở chế độ riêng tư, bạn có thể sử dụng gói dotenv. Cũng đừng quên thêm tệp .env mà bạn sẽ tạo vào .gitignore.
Vì vậy, bây giờ chúng tôi có cái này:
let transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
type: 'OAuth2',
user: process.env.MAIL_USERNAME,
pass: process.env.MAIL_PASSWORD,
clientId: process.env.OAUTH_CLIENTID,
clientSecret: process.env.OAUTH_CLIENT_SECRET,
refreshToken: process.env.OAUTH_REFRESH_TOKEN
}
});
Tiếp theo, chúng ta sẽ tạo đối tượng mailOptions, đối tượng này chứa thông tin chi tiết về nơi gửi email và với dữ liệu nào.
let mailOptions = {
from: [email protected],
to: [email protected],
subject: 'Nodemailer Project',
text: 'Hi from your nodemailer project'
};
Đối tượng này có thể có nhiều trường hơn và thậm chí nhiều người nhận, nhưng chúng tôi sẽ không đi sâu vào vấn đề đó ở đây.
Cuối cùng, chúng tôi sẽ sử dụng phương thức sendMail:
transporter.sendMail(mailOptions, function(err, data) {
if (err) {
console.log("Error " + err);
} else {
console.log("Email sent successfully");
}
});
Chạy ứng dụng của bạn và bạn sẽ thấy hộp thư đến của mình được điền một email mới.
Bài viết này được lấy cảm hứng từ một dự án tôi đã tạo sử dụng Nodemailer. Nếu bạn muốn kiểm tra, hãy truy cập vào đây.