Computer >> คอมพิวเตอร์ >  >> ซอฟต์แวร์ >> จดหมาย

วิธีใช้ Nodemailer เพื่อส่งอีเมลจากเซิร์ฟเวอร์ Node.js ของคุณ

Nodemailer เป็นโมดูล Node.js ที่ให้คุณส่งอีเมลจากเซิร์ฟเวอร์ของคุณได้อย่างง่ายดาย ไม่ว่าคุณต้องการสื่อสารกับผู้ใช้ของคุณหรือเพียงแค่แจ้งตัวเองเมื่อมีบางอย่างผิดพลาด หนึ่งในตัวเลือกสำหรับการทำเช่นนั้นก็คือผ่านทางอีเมล

มีบทความมากมายที่อธิบายวิธีใช้ Nodemailer ในรูปแบบแบร์โบน แต่บทความนี้ไม่ใช่หนึ่งในนั้น ในที่นี้ ฉันจะแสดงวิธีปฏิบัติที่พบบ่อยที่สุดในการส่งอีเมลจากแบ็กเอนด์ Node.js โดยใช้ Nodemailer และ Gmail

วิธีเริ่มต้นใช้งาน Nodemailer

ขั้นแรก เราต้องตั้งค่าต้นแบบ Node.js โดยใช้ Express เพื่อให้แน่ใจว่าคุณได้ติดตั้ง Node และ npm แล้ว คุณสามารถเรียกใช้คำสั่งต่อไปนี้:

node -v 
npm -v

หากคำสั่งทั้งสองนี้แสดงเวอร์ชัน แสดงว่าคุณพร้อมแล้ว มิฉะนั้น ให้ติดตั้งสิ่งที่ขาดหายไป

สร้างไดเร็กทอรีสำหรับโครงการของคุณ เราจะใช้ nodemailerProject .

mkdir nodemailerProject

เข้าไปภายในไดเร็กทอรีที่สร้างขึ้นใหม่และเรียกใช้

npm init

สิ่งนี้จะเริ่มต้นโครงการของเราด้วย pacakge.json ไฟล์.

ต่อไป เราจะต้องติดตั้ง Express โดยใช้:

npm install express

ขึ้นอยู่กับไฟล์ที่คุณชี้ไปที่จุดเริ่มต้นของคุณ (ค่าเริ่มต้นคือ index.js) เปิดไฟล์แล้ววางโค้ดต่อไปนี้:

const express = require('express')
const app = express()
const port = 3000


app.listen(port, () => {
  console.log(`nodemailerProject is listening at https://localhost:${port}`)
})
index.js

ข้างต้นคือสิ่งที่จำเป็นในการเริ่มเซิร์ฟเวอร์อย่างง่ายโดยใช้ Express คุณจะเห็นว่ามันทำงานอย่างถูกต้องโดยเรียกใช้:

node index.js

วิธีการติดตั้ง Nodemailer

ติดตั้ง nodemailer โดยใช้คำสั่งต่อไปนี้:

npm install nodemailer

API ของ Nodemailer นั้นค่อนข้างเรียบง่ายและต้องการให้เราทำสิ่งต่อไปนี้:

  1. สร้าง ขนส่ง วัตถุ
  2. สร้าง MailOptions วัตถุ
  3. ใช้ Transporter.sendMail วิธีการ

ในการสร้างวัตถุขนย้าย เราทำสิ่งต่อไปนี้:

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
      }
    });
✋ โปรดทราบ นอกเหนือจากผู้ใช้และรหัสผ่าน ซึ่งเป็นข้อมูลประจำตัวของคุณเองสำหรับบัญชี Gmail ของคุณ อีกสามคีย์ต้องถูกดึงออกมาหลังจากตั้งค่า OAuth

ตามที่เราระบุไว้ในตอนต้นของบทความนี้ เราจะใช้ Gmail เพื่อตอบสนองความต้องการในการส่งจดหมายของเรา อย่างที่คุณอาจเดาได้ว่า Gmail มีความปลอดภัยในระดับสูงเมื่อพูดถึงอีเมลที่ส่งโดย/ไปยังบัญชีของผู้ใช้

มีหลายวิธีที่เราจะเอาชนะอุปสรรคนี้ได้ (บางอย่างดีกว่าวิธีอื่นๆ) และเราจะเลือกวิธีที่ต้องการให้เราสร้างโครงการใน Google Cloud Platform . เราจำเป็นต้องทำเช่นนั้นเพื่อให้ Gmail เปิดใช้งานข้อมูลรับรองความปลอดภัย OAuth

ถ้าคุณต้องการอ่านเพิ่มเติมเกี่ยวกับความซับซ้อนของการใช้ Gmail กับ nodemailer ไปที่นี่

ขั้นตอนต่อไปจะต้องมีการกำหนดค่าบางอย่างแทนการเข้ารหัส ดังนั้นเตรียมตัวให้พร้อม

วิธีใช้ Nodemailer เพื่อส่งอีเมลจากเซิร์ฟเวอร์ Node.js ของคุณ
รูปภาพโดย Daniel McCullough / Unsplash

การกำหนดค่าแพลตฟอร์ม Google Cloud

หากคุณไม่มีบัญชี Google Cloud Platform อย่าลืมตั้งค่าบัญชีเป็นข้อกำหนดเบื้องต้น เมื่อคุณตั้งค่าแล้ว ให้สร้างโครงการใหม่โดยคลิกที่เมนูแบบเลื่อนลงที่มุมซ้ายบน

วิธีใช้ Nodemailer เพื่อส่งอีเมลจากเซิร์ฟเวอร์ Node.js ของคุณ

เลือกตัวเลือกโครงการใหม่:

วิธีใช้ Nodemailer เพื่อส่งอีเมลจากเซิร์ฟเวอร์ Node.js ของคุณ

ในหน้าต่างถัดไป เราจะต้องตั้งชื่อโครงการของเรา เลือกสิ่งที่คุณต้องการ แต่เราจะดำเนินการต่อโดยไม่มี NodemailerProject ชื่อ. สำหรับสถานที่ให้บริการ คุณสามารถปล่อยให้เป็นไม่มีองค์กร

วิธีใช้ Nodemailer เพื่อส่งอีเมลจากเซิร์ฟเวอร์ Node.js ของคุณ

อาจใช้เวลาสองสามวินาทีในการตั้งค่าโปรเจ็กต์ แต่หลังจากนั้น คุณจะสามารถเห็นหน้าจอนี้:

วิธีใช้ Nodemailer เพื่อส่งอีเมลจากเซิร์ฟเวอร์ Node.js ของคุณ

เปิดเมนูการนำทางโดยคลิกที่เส้นประสามเส้นที่มุมบนซ้ายและเลือก API และบริการ:

วิธีใช้ Nodemailer เพื่อส่งอีเมลจากเซิร์ฟเวอร์ Node.js ของคุณ

เพื่อให้สามารถใช้ Nodemailer และ Gmail ได้ เราจะต้องใช้ OAuth2 หากคุณไม่คุ้นเคยกับ OAuth แสดงว่าเป็นโปรโตคอลสำหรับการตรวจสอบสิทธิ์ ฉันจะไม่เจาะจงในที่นี้เพราะไม่จำเป็น แต่ถ้าคุณต้องการทำความเข้าใจเพิ่มเติม ไปที่นี่

ก่อนอื่นเราจะต้องกำหนดค่าหน้าจอคำยินยอม OAuth ของเรา:

วิธีใช้ Nodemailer เพื่อส่งอีเมลจากเซิร์ฟเวอร์ Node.js ของคุณ

หากคุณไม่ได้เป็นสมาชิก G-Suite ตัวเลือกเดียวที่มีคือภายนอกสำหรับประเภทผู้ใช้

วิธีใช้ Nodemailer เพื่อส่งอีเมลจากเซิร์ฟเวอร์ Node.js ของคุณ

หลังจากคลิกสร้าง หน้าจอถัดไปกำหนดให้เราต้องกรอกข้อมูลของแอปพลิเคชัน (เซิร์ฟเวอร์ของเรา):

วิธีใช้ Nodemailer เพื่อส่งอีเมลจากเซิร์ฟเวอร์ Node.js ของคุณ

กรอกอีเมลของคุณในฟิลด์อีเมลสนับสนุนผู้ใช้และในฟิลด์ข้อมูลติดต่อของนักพัฒนา การคลิกบันทึกและดำเนินการต่อจะนำเราไปสู่ขั้นตอนขอบเขตของการกำหนดค่านี้ ข้ามขั้นตอนนี้ไป เนื่องจากไม่เกี่ยวข้องกับเรา และเข้าสู่ขั้นตอนผู้ใช้ทดสอบ

วิธีใช้ Nodemailer เพื่อส่งอีเมลจากเซิร์ฟเวอร์ Node.js ของคุณ

ที่นี่ เพิ่มตัวเองเป็นผู้ใช้แล้วคลิกบันทึกและดำเนินการต่อ

วิธีกำหนดการตั้งค่า OAuth ของคุณ

ในขั้นตอนนี้ เราจะสร้างข้อมูลรับรอง OAuth เพื่อใช้กับ Nodemailer ตรงไปที่แท็บข้อมูลรับรองด้านบนหน้าจอยินยอม OAuth คลิกที่เครื่องหมายบวก (➕) ที่มีข้อความว่า สร้างข้อมูลรับรอง แล้วเลือกรหัสไคลเอ็นต์ OAuth

วิธีใช้ Nodemailer เพื่อส่งอีเมลจากเซิร์ฟเวอร์ Node.js ของคุณ

ในเมนูแบบเลื่อนลงประเภทแอปพลิเคชัน ให้เลือก แอปพลิเคชันเว็บ :

วิธีใช้ Nodemailer เพื่อส่งอีเมลจากเซิร์ฟเวอร์ Node.js ของคุณ

ใน URI การเปลี่ยนเส้นทางที่ได้รับอนุญาต อย่าลืมเพิ่ม OAuth2 Playground (https://developers.google.com/oauthplayground) เนื่องจากเราจะใช้ OAuth2 Playground เพื่อรับคีย์ที่กล่าวถึงในตอนต้นของบทความนี้

วิธีใช้ Nodemailer เพื่อส่งอีเมลจากเซิร์ฟเวอร์ Node.js ของคุณ

หลังจากคลิกสร้าง คุณจะเห็นรหัสลูกค้าและข้อมูลลับของลูกค้า เก็บสิ่งเหล่านี้ไว้กับตัวเองและอย่าเปิดเผยไม่ว่าในลักษณะใด รูปร่าง หรือรูปแบบใดๆ .

วิธีใช้ Nodemailer เพื่อส่งอีเมลจากเซิร์ฟเวอร์ Node.js ของคุณ
รูปภาพโดย Power Lai / Unsplash

รับโทเค็นการรีเฟรช OAuth ของคุณ

ในการรับโทเค็นการรีเฟรช ซึ่งเราจะใช้ภายในวัตถุการขนส่งใน Nodemailer เราต้องไปที่ OAuth2 Playground เราอนุมัติ URI นี้เพื่อจุดประสงค์เฉพาะนี้ในระยะก่อนหน้านี้

1. คลิกไอคอนรูปเฟืองทางด้านขวา (ซึ่งก็คือการกำหนดค่า OAuth2) และทำเครื่องหมายที่ช่องเพื่อใช้ข้อมูลรับรอง OAuth2 ของคุณเอง:

วิธีใช้ Nodemailer เพื่อส่งอีเมลจากเซิร์ฟเวอร์ Node.js ของคุณ

2. มองไปทางซ้ายของเว็บไซต์แล้วคุณจะเห็นรายการบริการ เลื่อนลงมาจนกว่าคุณจะเห็น Gmail API v1

วิธีใช้ Nodemailer เพื่อส่งอีเมลจากเซิร์ฟเวอร์ Node.js ของคุณ

3. คลิก อนุญาต APIs

คุณจะเห็นหน้าจอเพื่อลงชื่อเข้าใช้บัญชี Gmail ของคุณ เลือกรายการที่คุณระบุว่าเป็นผู้ใช้ทดสอบ

4. หน้าจอถัดไปจะแจ้งให้คุณทราบว่า Google ยังไม่ได้ยืนยันแอปพลิเคชันนี้ แต่ไม่เป็นไรเพราะเรายังไม่ได้ส่งไปเพื่อยืนยัน คลิกดำเนินการต่อ

วิธีใช้ Nodemailer เพื่อส่งอีเมลจากเซิร์ฟเวอร์ Node.js ของคุณ

5. ในหน้าจอถัดไป คุณจะถูกขอให้อนุญาตโครงการของคุณเพื่อโต้ตอบกับบัญชี Gmail ของคุณ ทำเช่นนั้น

วิธีใช้ Nodemailer เพื่อส่งอีเมลจากเซิร์ฟเวอร์ Node.js ของคุณ

6. เมื่อเสร็จแล้ว คุณจะถูกเปลี่ยนเส้นทางกลับไปที่ OAuth Playground และคุณจะเห็นว่ามีรหัสการให้สิทธิ์ในเมนูทางด้านซ้าย คลิกที่ปุ่มสีน้ำเงินที่มีข้อความ เปลี่ยนรหัสการให้สิทธิ์สำหรับโทเค็น .

ฟิลด์สำหรับโทเค็นการรีเฟรชและโทเค็นการเข้าถึงจะถูกกรอกในขณะนี้

กลับไปที่เซิร์ฟเวอร์

หลังจากกำหนดค่าเหล่านี้ทั้งหมดแล้ว เราสามารถกลับไปที่แอปพลิเคชันของเราและป้อนข้อมูลทั้งหมดลงในการสร้างตัวขนส่ง เพื่อให้ข้อมูลประจำตัวของคุณเป็นแบบส่วนตัว คุณสามารถใช้แพ็คเกจ dotenv อย่าลืมเพิ่มไฟล์ .env ที่คุณจะสร้างใน .gitignore

ตอนนี้เรามีสิ่งนี้:

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
      }
    });

ต่อไป เราจะสร้างออบเจ็กต์ mailOptions ซึ่งมีรายละเอียดของตำแหน่งที่จะส่งอีเมลและข้อมูลใดบ้าง

let mailOptions = {
      from: [email protected],
      to: [email protected],
      subject: 'Nodemailer Project',
      text: 'Hi from your nodemailer project'
    };

ออบเจ็กต์นี้สามารถมีฟิลด์ได้มากขึ้นและแม้กระทั่งผู้รับหลายคน แต่เราจะไม่พูดถึงเรื่องนี้ที่นี่

สุดท้าย เราจะใช้วิธี sendMail:

transporter.sendMail(mailOptions, function(err, data) {
      if (err) {
        console.log("Error " + err);
      } else {
        console.log("Email sent successfully");
      }
    });

เรียกใช้แอปพลิเคชันของคุณและคุณจะเห็นว่ากล่องจดหมายของคุณถูกเติมด้วยอีเมลใหม่

บทความนี้ได้รับแรงบันดาลใจจากโครงการที่ฉันสร้างซึ่งใช้ Nodemailer หากคุณต้องการตรวจสอบ ไปที่นี่