Kỹ thuật

Tự động hóa email marketing với Google Sheets và Apps Script

Hoàng Mạnh TuânHoàng Mạnh Tuân
30 tháng 12, 2025
Cập nhật: 25 tháng 3, 2026
14 phút đọc
Tự động hóa email marketing với Google Sheets và Apps Script
# Tự động hóa email marketing với Google Sheets và Apps Script Bạn muốn gửi email hàng loạt mà không cần trả phí cho Mailchimp hay SendGrid? Google Sheets + Apps Script là giải pháp hoàn hảo! ## Tổng quan hệ thống ### Tính năng: - ✅ Gửi email hàng loạt (tối đa 100 email/ngày với tài khoản miễn phí) - ✅ Personalize email (Tên, công ty, sản phẩm...) - ✅ Template HTML đẹp mắt - ✅ Theo dõi trạng thái gửi - ✅ Lên lịch gửi tự động ## 1. Thiết kế Google Sheet ### Sheet "Contacts" - Danh sách liên hệ: | Cột | Tên | Mô tả | |-----|-----|-------| | A | Email | Địa chỉ email | | B | Name | Tên người nhận | | C | Company | Công ty | | D | Status | Trạng thái: Active/Unsubscribed | | E | LastSent | Ngày gửi email gần nhất | | F | SendResult | Kết quả: Sent/Failed | ### Sheet "Templates" - Mẫu email: | Cột | Tên | |-----|-----| | A | TemplateName | | B | Subject | | C | HTMLBody | ## 2. Tạo Template Email HTML ```html

🎉 Ưu đãi đặc biệt dành cho {{name}}!

Xin chào {{name}},

Cảm ơn bạn đã quan tâm đến {{company}}!

Chúng tôi có ưu đãi đặc biệt dành riêng cho bạn:

  • Giảm 30% tất cả sản phẩm
  • Miễn phí hỗ trợ cài đặt
  • Bảo hành 12 tháng

Xem ngay →

``` ## 3. Code Apps Script ### Script gửi email hàng loạt: ```javascript function sendBulkEmails() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const contactsSheet = ss.getSheetByName('Contacts'); const templatesSheet = ss.getSheetByName('Templates'); // Lấy template const templateData = templatesSheet.getRange('A2:C2').getValues()[0]; const subject = templateData[1]; const htmlTemplate = templateData[2]; // Lấy danh sách contacts const contacts = contactsSheet.getRange('A2:F' + contactsSheet.getLastRow()).getValues(); let sentCount = 0; const maxDaily = 100; // Giới hạn Gmail miễn phí contacts.forEach((contact, index) => { const [email, name, company, status, lastSent, result] = contact; // Chỉ gửi cho contacts active if (status !== 'Active' || sentCount >= maxDaily) return; // Personalize email let personalizedBody = htmlTemplate .replace(/{{name}}/g, name || 'Bạn') .replace(/{{company}}/g, company || 'SheetStore') .replace(/{{unsubscribe_link}}/g, 'https://yoursite.com/unsubscribe?email=' + email); try { GmailApp.sendEmail(email, subject, '', { htmlBody: personalizedBody, name: 'SheetStore Team' }); // Cập nhật trạng thái const row = index + 2; contactsSheet.getRange(row, 5).setValue(new Date()); // LastSent contactsSheet.getRange(row, 6).setValue('Sent'); // SendResult sentCount++; // Nghỉ 1 giây để tránh rate limit Utilities.sleep(1000); } catch (error) { contactsSheet.getRange(index + 2, 6).setValue('Failed: ' + error.message); } }); Logger.log(`Đã gửi ${sentCount} email thành công!`); // Gửi báo cáo cho admin GmailApp.sendEmail( 'admin@yourcompany.com', 'Báo cáo gửi email ' + new Date().toLocaleDateString('vi-VN'), `Đã gửi thành công ${sentCount} email.` ); } ``` ### Lên lịch gửi tự động: ```javascript function createEmailSchedule() { // Xóa trigger cũ ScriptApp.getProjectTriggers().forEach(t => ScriptApp.deleteTrigger(t)); // Tạo trigger gửi mỗi ngày lúc 9h sáng ScriptApp.newTrigger('sendBulkEmails') .timeBased() .everyDays(1) .atHour(9) .create(); } ``` ## 4. Tạo Menu tùy chỉnh ```javascript function onOpen() { const ui = SpreadsheetApp.getUi(); ui.createMenu('📧 Email Marketing') .addItem('Gửi email ngay', 'sendBulkEmails') .addItem('Lên lịch gửi hàng ngày', 'createEmailSchedule') .addSeparator() .addItem('Xem báo cáo', 'showReport') .addToUi(); } function showReport() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName('Contacts'); const data = sheet.getRange('F2:F' + sheet.getLastRow()).getValues(); const sent = data.filter(r => r[0] === 'Sent').length; const failed = data.filter(r => r[0] && r[0].startsWith('Failed')).length; const total = data.filter(r => r[0] !== '').length; const ui = SpreadsheetApp.getUi(); ui.alert( '📊 Báo cáo Email Marketing', `✅ Đã gửi: ${sent} ❌ Thất bại: ${failed} 📧 Tổng: ${total}`, ui.ButtonSet.OK ); } ``` ## 5. Tips nâng cao ### A/B Testing subject line: ```javascript function getSubjectLine(variant) { const subjects = { A: '🎉 Ưu đãi 30% - Chỉ hôm nay!', B: 'Giảm giá đặc biệt dành cho bạn' }; return subjects[variant]; } ``` ### Tracking mở email: Thêm tracking pixel vào HTML: ```html ``` ## Lưu ý quan trọng ⚠️ **Giới hạn Gmail:** - Tài khoản miễn phí: 100 email/ngày - Google Workspace: 2000 email/ngày ⚠️ **Tránh spam:** - Luôn có link hủy đăng ký - Không gửi cho người chưa đồng ý - Nội dung có giá trị ## Kết luận Với Google Sheets + Apps Script, bạn có thể xây dựng hệ thống email marketing miễn phí và mạnh mẽ. Hãy bắt đầu với số lượng nhỏ và mở rộng dần!

Chia sẻ bài viết:

Hoàng Mạnh Tuân

Hoàng Mạnh Tuân

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