Cách tự động gửi email từ Google Sheets bằng Apps Script

Hướng dẫn từng bước viết Apps Script để gửi email tự động từ danh sách trong Google Sheets: tạo script, cấp quyền, đánh dấu đã gửi và đặt lịch chạy định kỳ.
Bạn có bảng tính danh sách khách hàng, nhân viên hay học viên và cần gửi email cho từng người, ví dụ báo lịch hẹn, nhắc thanh toán hoặc gửi kết quả? Làm tay rất mất thời gian. Với Google Apps Script, một đoạn mã ngắn có thể đọc từng dòng trong Google Sheets và gửi email qua Gmail của bạn, kể cả khi bạn không làm gì.
Bài này dành cho người chưa từng viết code. Bạn chỉ cần sao chép đoạn mã, chỉnh vài chỗ và cấp quyền. Nếu chưa quen dùng Sheets, hãy đọc trước cách dùng Google Sheets làm việc nhóm.
Chuẩn bị bảng tính
Tạo một Google Sheets với hàng đầu tiên là tiêu đề, ví dụ:
- Cột A: Tên
- Cột B: Email
- Cột C: Nội dung (hoặc mã đơn, ngày hẹn…)
- Cột D: Trạng thái (để script ghi "Đã gửi")
Các dòng dữ liệu bắt đầu từ dòng 2. Hãy dùng vài email thử của chính bạn trước khi gửi thật.
Bước 1: Mở Apps Script
- Mở bảng tính trong Google Sheets.
- Trên thanh menu, chọn Extensions (Tiện ích mở rộng) > Apps Script.
- Một tab mới mở ra với tệp Code.gs có sẵn hàm trống.
- Xóa nội dung cũ và dán đoạn mã ở bước tiếp theo.
Bước 2: Dán đoạn mã gửi email
Đoạn mã dưới đây đọc từng dòng, gửi email cho dòng chưa có chữ "Đã gửi" rồi ghi lại trạng thái:
function guiEmail() {
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
for (var i = 1; i < data.length; i++) {
var ten = data[i][0];
var email = data[i][1];
var noiDung = data[i][2];
var trangThai = data[i][3];
if (email && trangThai !== 'Đã gửi') {
var tieuDe = 'Thông báo gửi ' + ten;
var thuChinh = 'Chào ' + ten + ',\n\n' + noiDung + '\n\nTrân trọng.';
MailApp.sendEmail(email, tieuDe, thuChinh);
sheet.getRange(i + 1, 4).setValue('Đã gửi');
}
}
}
Giải thích ngắn:
getDataRange().getValues()lấy toàn bộ dữ liệu bảng.- Vòng lặp bắt đầu từ
i = 1để bỏ qua dòng tiêu đề. MailApp.sendEmail(người nhận, tiêu đề, nội dung)gửi email.setValue('Đã gửi')ghi vào cột D để tránh gửi lặp lần sau.
Bạn có thể sửa tieuDe và thuChinh cho phù hợp. Dấu \n nghĩa là xuống dòng.
Bước 3: Lưu và chạy thử
- Bấm biểu tượng Save project (Lưu dự án) hoặc Ctrl + S. Đặt tên dự án nếu được hỏi.
- Ở thanh công cụ, chọn hàm guiEmail trong danh sách thả xuống rồi bấm Run (Chạy).
- Lần đầu, Google yêu cầu cấp quyền: bấm Review permissions (Xem lại quyền), chọn tài khoản của bạn.
- Nếu thấy cảnh báo "Google hasn't verified this app" (Google chưa xác minh ứng dụng này), đó là do script do chính bạn viết. Chỉ tiếp tục nếu bạn tin đoạn mã của mình: chọn Advanced (Nâng cao) > Go to ... (unsafe) rồi Allow (Cho phép).
- Quay lại bảng tính, kiểm tra cột D và hộp thư của người nhận thử.
Cảnh báo trên chỉ xuất hiện với script bạn tự viết. Tuyệt đối không cấp quyền cho script lạ do người khác gửi, vì nó có thể đọc hoặc gửi thư thay bạn.
Bước 4: Gửi theo lịch tự động
Nếu muốn script tự chạy mỗi ngày:
- Trong Apps Script, ở thanh bên trái chọn biểu tượng đồng hồ Triggers (Trình kích hoạt).
- Bấm Add Trigger (Thêm trình kích hoạt) ở góc dưới bên phải.
- Chọn hàm guiEmail, nguồn sự kiện Time-driven (Theo thời gian).
- Chọn kiểu chạy, ví dụ Day timer (Hằng ngày) và khung giờ.
- Bấm Save.
Từ giờ, script sẽ gửi cho các dòng chưa đánh dấu "Đã gửi". Thời điểm chạy chính xác nằm trong khung giờ bạn chọn, không chính xác từng phút.
Nâng cấp: gửi file đính kèm hoặc email có định dạng
- Gửi email có HTML (in đậm, link): dùng
MailApp.sendEmail({to: email, subject: tieuDe, htmlBody: noiDungHtml}). - Đặt tên người gửi hiển thị: thêm
name: 'Tên cửa hàng'vào tham số. - Đính kèm file từ Google Drive: dùng
DriveApp.getFileById('ID_FILE').getBlob()rồi thêmattachments: [file].
Với email đính kèm file lớn, nên chia sẻ link thay vì đính kèm trực tiếp. Xem cách đính kèm file và gửi email bằng Gmail.
Lỗi thường gặp
- Không gửi được: kiểm tra địa chỉ trong cột B có đúng định dạng, có khoảng trắng thừa không.
- Báo lỗi vượt hạn mức: đã gửi quá giới hạn trong ngày; chờ sang ngày mới hoặc giảm số lượng.
- Gửi lặp lại: do chưa ghi trạng thái hoặc cột D sai vị trí; kiểm tra số
4tronggetRange(i + 1, 4)khớp với cột trạng thái. - Email vào thư rác: tránh tiêu đề quảng cáo, nội dung giống spam, và chỉ gửi cho người quen.
Nếu bạn muốn nhận phản hồi từ mẫu Google Forms vào Sheets rồi mới gửi email, xem thêm nối Google Forms với Google Sheets.
Cần hỗ trợ thêm?
Nếu quy trình của bạn phức tạp hơn (gửi hóa đơn, nhắc lịch, đồng bộ với phần mềm bán hàng), cửa hàng có thể hỗ trợ qua dịch vụ phần mềm theo yêu cầu hoặc dịch vụ IT. Gọi 0943.847.333 để trao đổi.
Câu hỏi thường gặp
Apps Script có miễn phí không?
Apps Script dùng được với tài khoản Google thông thường mà không mất phí, nhưng có giới hạn về số email gửi và thời gian chạy do Google quy định.
Gửi bao nhiêu email mỗi ngày bằng Apps Script?
Giới hạn do Google quy định và có thể thay đổi, tùy loại tài khoản. Bạn nên xem tài liệu Apps Script chính thức và đừng dùng để gửi hàng loạt thư quảng cáo.
Vì sao Google cảnh báo chưa xác minh ứng dụng?
Vì script do bạn tự viết chưa qua quy trình xác minh của Google. Chỉ cấp quyền cho script do chính bạn tạo hoặc đã kiểm tra mã, không cấp cho script lạ.
Làm sao để email không bị gửi lặp?
Ghi trạng thái 'Đã gửi' vào một cột sau mỗi lần gửi và kiểm tra cột này trước khi gửi, như trong đoạn mã mẫu.





