MailApp Cơ Bản
MailApp là cách đơn giản nhất để gửi email từ Apps Script. Phù hợp cho thông báo, báo cáo tự động:
function sendSimpleEmail() {
MailApp.sendEmail({
to: 'recipient@example.com',
subject: 'Bao cao doanh thu thang 3',
body: 'Doanh thu thang 3 dat 500 trieu VND.'
});
}
// Gửi cho nhiều người
function sendToMultiple() {
MailApp.sendEmail({
to: 'a@example.com,b@example.com',
cc: 'manager@example.com',
bcc: 'ceo@example.com',
subject: 'Thong bao',
body: 'Noi dung thong bao...'
});
}Email HTML — Đẹp & Chuyên Nghiệp
function sendHTMLReport() {
const sheet = SpreadsheetApp.getActiveSheet();
const data = sheet.getDataRange().getValues();
// Tao header bang HTML
let tableHTML = '<table style="border-collapse:collapse;width:100%">';
tableHTML += '<tr style="background:#4285F4;color:white">';
data[0].forEach(function(header) {
tableHTML += '<th style="padding:8px;border:1px solid #ddd">' + header + '</th>';
});
tableHTML += '</tr>';
// Tao cac hang du lieu
for (var i = 1; i < data.length; i++) {
var rowColor = i % 2 === 0 ? '#f9f9f9' : '#ffffff';
tableHTML += '<tr style="background:' + rowColor + '">';
data[i].forEach(function(cell) {
tableHTML += '<td style="padding:8px;border:1px solid #ddd">' + cell + '</td>';
});
tableHTML += '</tr>';
}
tableHTML += '</table>';
var htmlBody = '<h2 style="color:#333">Bao Cao Doanh Thu</h2>'
+ '<p>Xin gui bao cao ngay ' + new Date().toLocaleDateString('vi-VN') + '</p>'
+ tableHTML;
MailApp.sendEmail({
to: 'boss@company.com',
subject: 'Bao cao tu dong - ' + new Date().toLocaleDateString('vi-VN'),
htmlBody: htmlBody
});
Logger.log('Da gui email bao cao');
}Đính Kèm File
// Dinh kem Spreadsheet dang PDF
function sendReportWithPDF() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const pdfBlob = ss.getBlob().setName('BaoCaoThang3.pdf');
MailApp.sendEmail({
to: 'manager@company.com',
subject: 'Bao cao thang 3 dinh kem',
body: 'Xin gui bao cao thang 3 dinh kem.',
attachments: [pdfBlob]
});
}
// Dinh kem file tu Drive
function sendWithDriveFile() {
const file = DriveApp.getFileById('FILE_ID');
MailApp.sendEmail({
to: 'user@example.com',
subject: 'File tai lieu',
body: 'Xem file dinh kem.',
attachments: [file.getBlob()]
});
}Gửi Email Hàng Loạt Từ Sheet
// Sheet co cot: Ten | Email | So don hang | Tong tien
function sendBulkEmails() {
const sheet = SpreadsheetApp.getActiveSheet();
const data = sheet.getDataRange().getValues();
let sentCount = 0;
for (var i = 1; i < data.length; i++) {
const ten = data[i][0];
const email = data[i][1];
const soDon = data[i][2];
const tongTien = data[i][3];
if (!email || email === '') continue;
MailApp.sendEmail({
to: email,
subject: 'Thong bao don hang - ' + ten,
htmlBody: '<h3>Chao ' + ten + '!</h3>'
+ '<p>Ban co <strong>' + soDon + '</strong> don hang.'
+ 'Tong tien: <strong>' + tongTien.toLocaleString('vi-VN') + ' VND</strong></p>'
});
sentCount++;
// Tranh rate limit
if (sentCount % 20 === 0) Utilities.sleep(1000);
}
SpreadsheetApp.getActiveSheet().getRange(1, 6).setValue('Da gui: ' + sentCount + ' email');
}Giới hạn: MailApp cho phép 100 email/ngày (tài khoản thường) hoặc 1500/ngày (Google Workspace). Nếu cần gửi nhiều hơn, dùng dịch vụ bên thứ 3 (SendGrid, Mailchimp) qua UrlFetchApp.
GmailApp — Đọc & Quản Lý Email
// Tim kiem email chua doc
function checkUnreadOrders() {
const threads = GmailApp.search('is:unread subject:Don hang moi', 0, 10);
threads.forEach(function(thread) {
const msgs = thread.getMessages();
msgs.forEach(function(msg) {
Logger.log(msg.getSubject() + ' | ' + msg.getFrom());
msg.markRead();
});
});
}Ứng dụng thực tế: Đặt trigger hàng ngày lúc 18h, tổng hợp doanh thu trong ngày từ Sheet và gửi email báo cáo HTML cho toàn bộ team. Tiết kiệm 30 phút/ngày!