Computer >> Máy Tính >  >> Phần mềm >> Thư

Cách sử dụng Nodemailer để gửi email từ máy chủ Node.js của bạn

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}`)
})
index.js

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:

  1. Tạo Người vận chuyển đối tượng
  2. Tạo MailOptions Đối tượng
  3. 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ách sử dụng Nodemailer để gửi email từ máy chủ Node.js của bạn
Ảnh của Daniel McCullough / Unsplash

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.

Cách sử dụng Nodemailer để gửi email từ máy chủ Node.js của bạn

Chọn tùy chọn Dự án Mới:

Cách sử dụng Nodemailer để gửi email từ máy chủ Node.js của bạn

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ách sử dụng Nodemailer để gửi email từ máy chủ Node.js của bạn

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:

Cách sử dụng Nodemailer để gửi email từ máy chủ Node.js của bạn

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ách sử dụng Nodemailer để gửi email từ máy chủ Node.js của bạn

Để 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:

Cách sử dụng Nodemailer để gửi email từ máy chủ Node.js của bạn

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.

Cách sử dụng Nodemailer để gửi email từ máy chủ Node.js của bạn

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):

Cách sử dụng Nodemailer để gửi email từ máy chủ Node.js của bạn

Đ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.

Cách sử dụng Nodemailer để gửi email từ máy chủ Node.js của bạn

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.

Cách sử dụng Nodemailer để gửi email từ máy chủ Node.js của bạn

Trong trình đơn thả xuống Loại ứng dụng, chọn Ứng dụng web :

Cách sử dụng Nodemailer để gửi email từ máy chủ Node.js của bạn

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.

Cách sử dụng Nodemailer để gửi email từ máy chủ Node.js của bạn

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 .

Cách sử dụng Nodemailer để gửi email từ máy chủ Node.js của bạn
Ảnh của Power Lai / Unsplash

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:

Cách sử dụng Nodemailer để gửi email từ máy chủ Node.js của 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.

Cách sử dụng Nodemailer để gửi email từ máy chủ Node.js của bạn

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.

Cách sử dụng Nodemailer để gửi email từ máy chủ Node.js của bạn

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.

Cách sử dụng Nodemailer để gửi email từ máy chủ Node.js của bạn

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: tomerpacific@gmail.com,
      to: tomerpacific@gmail.com,
      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.