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}`)
})
ข้างต้นคือสิ่งที่จำเป็นในการเริ่มเซิร์ฟเวอร์อย่างง่ายโดยใช้ Express คุณจะเห็นว่ามันทำงานอย่างถูกต้องโดยเรียกใช้:
node index.js
วิธีการติดตั้ง Nodemailer
ติดตั้ง nodemailer โดยใช้คำสั่งต่อไปนี้:
npm install nodemailer
API ของ Nodemailer นั้นค่อนข้างเรียบง่ายและต้องการให้เราทำสิ่งต่อไปนี้:
- สร้าง ขนส่ง วัตถุ
- สร้าง MailOptions วัตถุ
- ใช้ 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 ไปที่นี่
ขั้นตอนต่อไปจะต้องมีการกำหนดค่าบางอย่างแทนการเข้ารหัส ดังนั้นเตรียมตัวให้พร้อม
การกำหนดค่าแพลตฟอร์ม Google Cloud
หากคุณไม่มีบัญชี Google Cloud Platform อย่าลืมตั้งค่าบัญชีเป็นข้อกำหนดเบื้องต้น เมื่อคุณตั้งค่าแล้ว ให้สร้างโครงการใหม่โดยคลิกที่เมนูแบบเลื่อนลงที่มุมซ้ายบน
เลือกตัวเลือกโครงการใหม่:
ในหน้าต่างถัดไป เราจะต้องตั้งชื่อโครงการของเรา เลือกสิ่งที่คุณต้องการ แต่เราจะดำเนินการต่อโดยไม่มี NodemailerProject ชื่อ. สำหรับสถานที่ให้บริการ คุณสามารถปล่อยให้เป็นไม่มีองค์กร
อาจใช้เวลาสองสามวินาทีในการตั้งค่าโปรเจ็กต์ แต่หลังจากนั้น คุณจะสามารถเห็นหน้าจอนี้:
เปิดเมนูการนำทางโดยคลิกที่เส้นประสามเส้นที่มุมบนซ้ายและเลือก API และบริการ:
เพื่อให้สามารถใช้ Nodemailer และ Gmail ได้ เราจะต้องใช้ OAuth2 หากคุณไม่คุ้นเคยกับ OAuth แสดงว่าเป็นโปรโตคอลสำหรับการตรวจสอบสิทธิ์ ฉันจะไม่เจาะจงในที่นี้เพราะไม่จำเป็น แต่ถ้าคุณต้องการทำความเข้าใจเพิ่มเติม ไปที่นี่
ก่อนอื่นเราจะต้องกำหนดค่าหน้าจอคำยินยอม OAuth ของเรา:
หากคุณไม่ได้เป็นสมาชิก G-Suite ตัวเลือกเดียวที่มีคือภายนอกสำหรับประเภทผู้ใช้
หลังจากคลิกสร้าง หน้าจอถัดไปกำหนดให้เราต้องกรอกข้อมูลของแอปพลิเคชัน (เซิร์ฟเวอร์ของเรา):
กรอกอีเมลของคุณในฟิลด์อีเมลสนับสนุนผู้ใช้และในฟิลด์ข้อมูลติดต่อของนักพัฒนา การคลิกบันทึกและดำเนินการต่อจะนำเราไปสู่ขั้นตอนขอบเขตของการกำหนดค่านี้ ข้ามขั้นตอนนี้ไป เนื่องจากไม่เกี่ยวข้องกับเรา และเข้าสู่ขั้นตอนผู้ใช้ทดสอบ
ที่นี่ เพิ่มตัวเองเป็นผู้ใช้แล้วคลิกบันทึกและดำเนินการต่อ
วิธีกำหนดการตั้งค่า OAuth ของคุณ
ในขั้นตอนนี้ เราจะสร้างข้อมูลรับรอง OAuth เพื่อใช้กับ Nodemailer ตรงไปที่แท็บข้อมูลรับรองด้านบนหน้าจอยินยอม OAuth คลิกที่เครื่องหมายบวก (➕) ที่มีข้อความว่า สร้างข้อมูลรับรอง แล้วเลือกรหัสไคลเอ็นต์ OAuth
ในเมนูแบบเลื่อนลงประเภทแอปพลิเคชัน ให้เลือก แอปพลิเคชันเว็บ :
ใน URI การเปลี่ยนเส้นทางที่ได้รับอนุญาต อย่าลืมเพิ่ม OAuth2 Playground (https://developers.google.com/oauthplayground) เนื่องจากเราจะใช้ OAuth2 Playground เพื่อรับคีย์ที่กล่าวถึงในตอนต้นของบทความนี้
หลังจากคลิกสร้าง คุณจะเห็นรหัสลูกค้าและข้อมูลลับของลูกค้า เก็บสิ่งเหล่านี้ไว้กับตัวเองและอย่าเปิดเผยไม่ว่าในลักษณะใด รูปร่าง หรือรูปแบบใดๆ .
รับโทเค็นการรีเฟรช OAuth ของคุณ
ในการรับโทเค็นการรีเฟรช ซึ่งเราจะใช้ภายในวัตถุการขนส่งใน Nodemailer เราต้องไปที่ OAuth2 Playground เราอนุมัติ URI นี้เพื่อจุดประสงค์เฉพาะนี้ในระยะก่อนหน้านี้
1. คลิกไอคอนรูปเฟืองทางด้านขวา (ซึ่งก็คือการกำหนดค่า OAuth2) และทำเครื่องหมายที่ช่องเพื่อใช้ข้อมูลรับรอง OAuth2 ของคุณเอง:
2. มองไปทางซ้ายของเว็บไซต์แล้วคุณจะเห็นรายการบริการ เลื่อนลงมาจนกว่าคุณจะเห็น Gmail API v1
3. คลิก อนุญาต APIs
คุณจะเห็นหน้าจอเพื่อลงชื่อเข้าใช้บัญชี Gmail ของคุณ เลือกรายการที่คุณระบุว่าเป็นผู้ใช้ทดสอบ
4. หน้าจอถัดไปจะแจ้งให้คุณทราบว่า Google ยังไม่ได้ยืนยันแอปพลิเคชันนี้ แต่ไม่เป็นไรเพราะเรายังไม่ได้ส่งไปเพื่อยืนยัน คลิกดำเนินการต่อ
5. ในหน้าจอถัดไป คุณจะถูกขอให้อนุญาตโครงการของคุณเพื่อโต้ตอบกับบัญชี Gmail ของคุณ ทำเช่นนั้น
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 หากคุณต้องการตรวจสอบ ไปที่นี่