ดึงข้อมูล Gmail ลง Google Sheets ด้วย GAS

 


ดึงข้อมูล Gmail ลง Google Sheets แบบมืออาชีพด้วย Google Apps Script

บทความนี้จะแนะนำการสร้างระบบ ดึงอีเมลจาก Gmail พร้อมไฟล์แนบ ลง Google Sheets แบบอัตโนมัติ โดยใช้ Google Apps Script ในระดับที่พร้อมใช้งานจริง (Production-ready) เหมาะสำหรับงานเอกสาร งานธุรการ งานรับเรื่องร้องเรียน หรือระบบจัดเก็บอีเมลอย่างเป็นระเบียบ


ภาพรวมของระบบ

สคริปต์ชุดนี้สามารถ:

  • 📥 ดึงอีเมลจาก Gmail ตาม Label ที่กำหนด
  • 🧾 บันทึกข้อมูลอีเมลลง Google Sheets (วันที่, ผู้ส่ง, หัวข้อ, เนื้อหา)
  • 📎 แยกและอัปโหลดไฟล์แนบไปยัง Google Drive
  • 🗂️ จัดโฟลเดอร์อัตโนมัติ แยกตาม วันที่ → หัวข้อเมล
  • 🔗 เก็บลิงก์ไฟล์แนบไว้ในชีต (เพิ่มคอลัมน์อัตโนมัติ)
  • 🔁 ป้องกันข้อมูลซ้ำ ด้วย Message ID
  • 🔒 ป้องกันการรันซ้อนด้วย LockService

เรียกได้ว่าเป็นโครงสร้างที่ “ครบ จบ และปลอดภัย” สำหรับใช้งานจริง


โครงสร้างการทำงานโดยสรุป

  1. ผู้ใช้ติด Label (เช่น to-sheet) ให้กับอีเมลที่ต้องการ
  2. สคริปต์ค้นหาอีเมลที่มี Label นี้
  3. ตรวจสอบว่า Message ไหนเคยถูกบันทึกแล้วหรือยัง
  4. บันทึกข้อมูลอีเมลลง Google Sheets
  5. อัปโหลดไฟล์แนบเข้า Google Drive
  6. สร้างโฟลเดอร์อัตโนมัติตามวันและหัวข้อ
  7. ลบ Label หลังประมวลผลเสร็จ


ส่วนที่ 1: การตั้งค่า (CONFIG)

const CONFIG = {
  SHEET_NAME: 'Inbox',
  GMAIL_LABEL: 'to-sheet',
  DRIVE_FOLDER_NAME: 'GmailAttachments',
  TIMEZONE: 'Asia/Bangkok',
  LOCK_TIMEOUT: 30000
};

จุดนี้ช่วยให้แก้ไขค่าได้ง่าย เช่น ชื่อชีต, ชื่อ Label หรือ Timezone โดยไม่ต้องไปไล่แก้โค้ดทั้งไฟล์


ส่วนที่ 2: ป้องกันการรันซ้อนด้วย LockService

const lock = LockService.getScriptLock();
if (!lock.tryLock(CONFIG.LOCK_TIMEOUT)) return;

เหมาะมากกับกรณีที่ใช้ Trigger หรือมีหลายคนเรียกใช้งานพร้อมกัน ช่วยป้องกันข้อมูลซ้ำและไฟล์ซ้ำ


ส่วนที่ 3: การดึงอีเมลจาก Gmail ตาม Label

const threads = GmailApp.search(`label:${CONFIG.GMAIL_LABEL}`);

ข้อดีของการใช้ Label คือ:

  • ควบคุมได้ง่าย
  • ไม่ดึงเมลเกินความจำเป็น
  • ผู้ใช้เลือกเมลเองได้


ส่วนที่ 4: ป้องกันเมลซ้ำด้วย Message ID

const processedIds = getProcessedMessageIds_(sheet);
if (processedIds.has(msgId)) return;

ใช้ Message ID เป็นตัวอ้างอิงหลัก ทำให้มั่นใจได้ว่า

1 เมล = 1 แถวในชีตเท่านั้น


ส่วนที่ 5: การจัดการไฟล์แนบอย่างเป็นระบบ

โครงสร้างโฟลเดอร์ใน Google Drive:

GmailAttachments/
 └── 2026-02-03/
     └── Subject_ABC123/
         ├── file1.pdf
         └── file2.jpg

ข้อดี:

  • หาไฟล์ง่าย
  • ไม่ปนกันระหว่างเมล
  • รองรับเมลหัวข้อซ้ำ (ใช้ MessageId ต่อท้าย)


ส่วนที่ 6: เพิ่มคอลัมน์ไฟล์แนบอัตโนมัติ

ไฟล์แนบ 1 | ไฟล์แนบ 2 | ไฟล์แนบ 3 | ...

ถ้าวันไหนมีเมลแนบ 5 ไฟล์ ชีตก็จะขยายคอลัมน์ให้เองทันที ไม่ต้องเตรียมล่วงหน้า


ส่วนที่ 7: ทำความสะอาดเนื้อหาอีเมล

msg.getPlainBody()
  .split('\n--')[0]
  .substring(0, 5000)

ช่วยตัด:

  • ลายเซ็น
  • quoted reply
  • เนื้อหาที่ยาวเกินไป

เหมาะสำหรับการเก็บเป็นบันทึกหรือหลักฐาน


เหมาะกับใคร?

  • งานธุรการ / งานสารบรรณ
  • ระบบรับเรื่องร้องเรียน
  • ระบบรับเอกสารแนบอัตโนมัติ
  • งานบัญชี / งาน HR
  • คนที่อยากใช้ Gmail + Sheets เป็น Mini System


สรุป

สคริปต์ชุดนี้เป็นตัวอย่างของ Google Apps Script ที่ออกแบบมาอย่างเป็นระบบ:

  • แยกฟังก์ชันชัดเจน
  • ปลอดภัยต่อข้อมูล
  • รองรับการขยายในอนาคต
  • ใช้งานจริงได้ทันที

ถ้าคุณกำลังมองหาวิธี เปลี่ยน Gmail ให้กลายเป็นระบบจัดเก็บข้อมูลอัตโนมัติ — โค้ดชุดนี้คือคำตอบ 🚀


หากต้องการต่อยอด เช่น

  • แจ้งเตือน LINE / Email
  • แยกชีตตามผู้ส่ง
  • ทำ Dashboard สรุปผล

สามารถพัฒนาเพิ่มจากโครงสร้างนี้ได้สบายมาก 👍


Download


***********************************

หากถูกใจโปรดสนับสนุนเป็นกำลังใจกันด้วยนะครับ

สนับสนุนที่นี่



แสดงความคิดเห็น (0)
ใหม่กว่า เก่ากว่า