Firebase—ส่ง Email แบบ Auto ด้วย Nodemailer

ถ้าหากรูปแบบงานของเราจำเป็นที่จะต้องส่งข้อมูลไม่ว่าจะอยู่ในรูปแบบของเอกสารหรือรูปภาพไปยังผู้ใช้งาน ซึ่งในปัจจุบันก็จะมีรูปแบบในการสื่อสารหลายแบบ และการส่ง E-Mail ก็ถือว่าเป็นอีกรูปแบบหนึ่งที่สะดวกสบาย และใช้งานง่าย แต่ถ้าหากว่าต้องมาคอยแนบเอกสาร, กำหนดข้อมูลใหม่ในรูปแบบเดิมๆ ทุกครั้งก็ดูจะน่าเบื่อไปหน่อย วันนี้ผมเลยจะนำเสนอการตั้งค่า Node mailer สำหรับการส่ง E-Mail แบบ Auto หลังจากกรอกข้อมูล และอัพโหลดไฟล์ในแบบฟอร์มที่กำหนด โดยผมจะใช้บริการของ Gmail ในการส่งร่วมกับ Nodemailer และทั้งหมดจะเขียนใน Firebase Clound Function โดยใช้ข้อมูลที่บันทึกใน Firebase Firestore


1. ตั้งค่าใน Gmail

— ก่อนอื่นต้องมีบัญชีการใช้งานของ Gmail ที่จะใช้เป็น E-Mail สำหรับส่งก่อนนะครับ ถ้ามีแล้วเราจะต้องทำการกำหนดความปลอดภัยให้เป็นแบบ 2FA ก่อน แล้วให้ทำการกำหนด “Application Specific” ก่อนและสร้าง Application Password ขึ้นมาแบบนี้ครับ

เลือกเป็น Other
กำหนดชื่อเป็น Nodemailer
ได้ app password มาเก็บไว้แล้วครับ

2. ตั้งค่า gmail.email และ gmail.password

— เปิด Terminal และติดตั้ง Firebase พร้อมกับกำหนดค่าต่างๆ ของ Project ที่ต้องการให้เรียบร้อย แล้วทำการกำหนดค่าตามนี้

โดยตั้งค่า email ให้ตรงกับบัญชีที่ใช้งาน ซึ่งบัญชีที่ส่งกับผู้ใช้งานต้องเป็นบัญชีเดียวกัน และกำหนด pass word ที่ได้จากข้อ 1 ไปด้วยครับ


3. เขียน Clound Function สำหรับการส่ง E-Mail

— ก่อนอื่นติดตั้ง nodemailer ก่อน

npm install nodemailer --save

— ในไฟล์ index.js เรียกใช้งาน nodemailer

const nodemailer = require("nodemailer");

— ตั้งค่าการใช้งาน

// initial node mailer
const gmailEmail = functions.config().gmail.email;
const gmailPassword = functions.config().gmail.password;
const mailTransport = nodemailer.createTransport({
  service: "gmail",
  auth: {
    user: gmailEmail,
    pass: gmailPassword,
  },
});

— ตั้งค่า Message Configuration เริ่มต้น

// set email options
const mailOptions = {
  // set from same config only
  from: '"NAME" <email@gmail.com>',
  to: emails, // Comma separated list or an array of recipients email addresses
};

— ตั้งค่า Message Configuration โดยให้แสดงข้อความจาก HTML

mailOptions.html = 'Your HTML'

— ตั้งค่า Message Configuration โดยให้แนบเอกสาร pdf จาก Url ในฐานข้อมูล

mailOptions.attachments = [
  {
     filename: 'fileName',
     path: 'url',
     contentType: "application/pdf",
  },
];

— Send Email

// send email to recipients
mailTransport
  .sendMail(mailOptions)
  .then((info) => {
    console.log(info.response);
  })
  .catch((error) => {
    console.error(error);
  });

4. ลองดูตัวอย่าง E-Mail ที่ผู้ใช้งานได้รับ

— จะได้ส่วนเนื้อหาตาม HTML ที่กำหนด และพร้อมเอกสารแนบที่ทำการอัพโหลดไว้ในแบบฟอร์ม


ท้ายสุด สำหรับงานที่ต้องการส่ง E-Mail โดยมีรูปแบบเดิมๆ เปลี่ยนแค่ข้อมูลที่ต้องการตามแบบฟอร์มที่ให้กรอก และสามารถแนบเอกสารไปด้วยได้ แถมยังใช้งานผ่าน Gmail ได้ด้วยแบบง่ายๆ เลย แบบนี้ก็หวังว่าคงจะเป็นทางเลือกและตัวอย่างสำหรับเพื่อนๆ นำไปใช้งานนะครับ😊😊😊


โปรโมชั่น คูปองส่วนลด และดีล ที่ดีที่สุดของร้านค้าออนไลน์กว่า 300 แบรนด์พร้อมรับเงินคืนจาก ShopBack
 https://bit.ly/3c4tlmV

Ruk-Com จดโดเมน-เช่าโฮสต์ ราคาประหยัด พร้อมให้บริการใน 1 นาที
 http://bit.ly/36q8A12