ดึงข้อมูล Gmail ลง Google Sheets แบบมืออาชีพด้วย Google Apps Script
บทความนี้จะแนะนำการสร้างระบบ ดึงอีเมลจาก Gmail พร้อมไฟล์แนบ ลง Google Sheets แบบอัตโนมัติ โดยใช้ Google Apps Script ในระดับที่พร้อมใช้งานจริง (Production-ready) เหมาะสำหรับงานเอกสาร งานธุรการ งานรับเรื่องร้องเรียน หรือระบบจัดเก็บอีเมลอย่างเป็นระเบียบ
ภาพรวมของระบบ
สคริปต์ชุดนี้สามารถ:
- 📥 ดึงอีเมลจาก Gmail ตาม Label ที่กำหนด
- 🧾 บันทึกข้อมูลอีเมลลง Google Sheets (วันที่, ผู้ส่ง, หัวข้อ, เนื้อหา)
- 📎 แยกและอัปโหลดไฟล์แนบไปยัง Google Drive
- 🗂️ จัดโฟลเดอร์อัตโนมัติ แยกตาม วันที่ → หัวข้อเมล
- 🔗 เก็บลิงก์ไฟล์แนบไว้ในชีต (เพิ่มคอลัมน์อัตโนมัติ)
- 🔁 ป้องกันข้อมูลซ้ำ ด้วย Message ID
- 🔒 ป้องกันการรันซ้อนด้วย LockService
เรียกได้ว่าเป็นโครงสร้างที่ “ครบ จบ และปลอดภัย” สำหรับใช้งานจริง
โครงสร้างการทำงานโดยสรุป
- ผู้ใช้ติด Label (เช่น
to-sheet) ให้กับอีเมลที่ต้องการ - สคริปต์ค้นหาอีเมลที่มี Label นี้
- ตรวจสอบว่า Message ไหนเคยถูกบันทึกแล้วหรือยัง
- บันทึกข้อมูลอีเมลลง Google Sheets
- อัปโหลดไฟล์แนบเข้า Google Drive
- สร้างโฟลเดอร์อัตโนมัติตามวันและหัวข้อ
- ลบ 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 สรุปผล
สามารถพัฒนาเพิ่มจากโครงสร้างนี้ได้สบายมาก 👍