CRM & Quản Lý Khách Hàng

Tự Động Gửi Email Chúc Mừng Sinh Nhật Khách Hàng Với Google Apps Script

Tuân HoangTuân Hoang
1 tháng 5, 2026
Cập nhật: 6 tháng 10, 2026
5 phút đọc
Ảnh minh họa bài viết: Tự Động Gửi Email Chúc Mừng Sinh Nhật Khách Hàng Với Google Apps Script

Trả lời nhanh: Lưu danh sách khách gồm họ tên, email, ngày sinh và cột đánh dấu đã gửi năm nay; viết Apps Script so ngày, tháng sinh với hôm nay rồi gửi email bằng MailApp hoặc GmailApp, đánh dấu đã gửi, và đặt trigger chạy mỗi sáng. Gmail thường gửi tối đa 100 người nhận mỗi ngày qua Apps Script, Workspace là 1.500.

Tại Sao Email Chúc Mừng Sinh Nhật Quan Trọng?

Email chúc mừng sinh nhật mang tính cá nhân và đến đúng dịp, nên thường được mở và bấm nhiều hơn hẳn email khuyến mãi gửi hàng loạt. Đây là cơ hội vàng để tăng tương tác và giữ chân khách hàng với chi phí gần như bằng 0 khi dùng Google Apps Script.

Chuẩn Bị Dữ Liệu Khách Hàng

Cấu trúc sheet "Khách Hàng"

Sheet cần có các cột: Họ tên | Email | Ngày sinh (DD/MM/YYYY) | Đã gửi năm nay (TRUE/FALSE) | Lần gửi cuối

Viết Apps Script Gửi Email Tự Động

Script chính

function sendBirthdayEmails() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName('KhachHang');
  const data = sheet.getDataRange().getValues();
  const today = new Date();
  const todayMonth = today.getMonth() + 1;
  const todayDay = today.getDate();
  const currentYear = today.getFullYear();

  let sentCount = 0;

  for (let i = 1; i < data.length; i++) {
    const row = data[i];
    const name = row[0];
    const email = row[1];
    const birthdayRaw = row[2];
    const alreadySentThisYear = row[3];

    if (!email || !birthdayRaw) continue;

    const birthday = new Date(birthdayRaw);
    const bMonth = birthday.getMonth() + 1;
    const bDay = birthday.getDate();

    // Kiểm tra sinh nhật hôm nay và chưa gửi năm nay
    if (bMonth === todayMonth && bDay === todayDay && !alreadySentThisYear) {
      const subject = '🎂 Chúc mừng sinh nhật ' + name + '! Quà tặng đặc biệt dành cho bạn';
      const body = createBirthdayEmailBody(name);

      try {
        GmailApp.sendEmail(email, subject, '', { htmlBody: body });

        // Đánh dấu đã gửi
        sheet.getRange(i + 1, 4).setValue(true);
        sheet.getRange(i + 1, 5).setValue(new Date());
        sentCount++;
        console.log(`Sent birthday email to: ${name} (${email})`);
      } catch (err) {
        console.error(`Failed to send to ${email}: ${err}`);
      }
    }
  }

  console.log(`Birthday emails sent today: ${sentCount}`);
}

function createBirthdayEmailBody(name) {
  return `
    <div style="font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto;">
      <div style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); padding: 40px; text-align: center;">
        <h1 style="color: white; font-size: 32px;">🎂 Chúc Mừng Sinh Nhật!</h1>
      </div>
      <div style="padding: 30px; background: #fff;">
        <p style="font-size: 18px;">Kính gửi <strong>${name}</strong>,</p>
        <p>Nhân dịp sinh nhật của bạn, chúng tôi gửi đến bạn lời chúc mừng chân thành nhất!</p>
        <p>Như một món quà đặc biệt, chúng tôi tặng bạn <strong>voucher giảm 20%</strong> cho đơn hàng tiếp theo.</p>
        <div style="text-align: center; margin: 30px 0;">
          <span style="background: #ff6b6b; color: white; padding: 12px 30px; border-radius: 25px; font-size: 20px; font-weight: bold;">
            BDAY20
          </span>
        </div>
        <p style="color: #888; font-size: 13px;">Mã có hiệu lực trong 30 ngày kể từ ngày sinh nhật của bạn.</p>
      </div>
    </div>
  `;
}

Reset trạng thái đầu năm mới

function resetYearlyBirthdayFlags() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet()
    .getSheetByName('KhachHang');
  const lastRow = sheet.getLastRow();
  // Xóa cột "Đã gửi năm nay" (cột D)
  sheet.getRange(2, 4, lastRow - 1).clearContent();
  console.log('Reset birthday flags for new year');
}

Cài Đặt Trigger Tự Động

Vào Extensions → Apps Script → Triggers → Add Trigger:

  • Function: sendBirthdayEmails
  • Trigger type: Time-driven → Day timer → 7am–8am

Script sẽ tự động chạy mỗi sáng, kiểm tra và gửi email cho khách có sinh nhật hôm đó.

Câu Hỏi Thường Gặp (FAQ)

Gmail có giới hạn số email gửi mỗi ngày không?

Gửi bằng Apps Script (MailApp/GmailApp) giới hạn 100 email/ngày với Gmail cá nhân và 1.500 email/ngày với Google Workspace. Đủ dùng cho hầu hết doanh nghiệp nhỏ và vừa.

Có thể gửi SMS thay vì email không?

Có thể tích hợp với Twilio hoặc ESMS.vn thông qua HTTP request trong Apps Script để gửi SMS sinh nhật.

Script có chạy được khi đóng trình duyệt không?

Có. Trigger chạy trên server của Google, không phụ thuộc vào trình duyệt của bạn có đang mở hay không.

Chia sẻ bài viết:

Tuân Hoang

Tuân Hoang

Đội ngũ SheetStore

Google SheetsGoogle Apps ScriptCRMAutomationPhần mềm quản lý doanh nghiệp

Google Workspace Certified, 5+ years experience

Bạn thấy bài viết hữu ích?

Đăng ký nhận thông báo khi có bài viết mới.

Nhận thông báo khi có bài viết mới. Không spam, hứa luôn! 😊

Bình luận (0)

Vui lòng đăng nhập để tham gia thảo luận