MailApp & GmailApp

Thời gian đọc: ~30 phút

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!