Dùng Apps Script gửi mail hàng loạt từ Google sheets (1 người xem)

Người dùng đang xem chủ đề này

Maika8008

Thành viên gạo cội
Tham gia
12/6/20
Bài viết
4,892
Được thích
5,895
Donate (Momo)
Donate
Giới tính
Nam
Chuẩn bị dữ liệu kiểu thế này:
1774578521131.png
rồi vào menu Tiện ích -> Apps script dán code sau đây vào:
JavaScript:
function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
 
  // Kiểm tra ô A2 trước khi chạy
  var firstRecipient = data[0][0];
  var emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  if (!firstRecipient || !emailRegex.test(firstRecipient)) {
    SpreadsheetApp.getUi().alert("Ô A2 rỗng hoặc không đúng định dạng email. Dừng chương trình.");
    return;
  }

  // Xác định dòng cuối cùng có dữ liệu trong cột A–D
  var lastRow = sheet.getRange("A1").getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();
  
  // Lấy dữ liệu từ A2 đến D:lastRow
  var data = sheet.getRange("A2:D" + lastRow).getValues();
 
  for (var i = 0; i < data.length; i++) {
    var row = data[i];
    var recipient = row[0]; // Cột A: địa chỉ email
    var subject   = row[1]; // Cột B: chủ đề
    var body      = row[2]; // Cột C: nội dung
    var attachmentUrl = row[3]; // Cột D: đường dẫn file
  
    var options = {};
    var status = "";
  
    if (attachmentUrl && attachmentUrl.trim() !== "") {
      try {
        var fileId = "";
        var startIndex = attachmentUrl.indexOf("/d/");
        if (startIndex !== -1) {
          startIndex += 3;
          var endIndex = attachmentUrl.indexOf("/", startIndex);
          if (endIndex !== -1) {
            fileId = attachmentUrl.substring(startIndex, endIndex);
          } else {
            fileId = attachmentUrl.substring(startIndex);
          }
        } else {
          fileId = attachmentUrl.trim();
        }
      
        var file = DriveApp.getFileById(fileId);
        options.attachments = [file];
      } catch (e) {
        Logger.log("Không thể lấy file: " + attachmentUrl + " - " + e.message);
        status = "Lỗi file";
      }
    }
  
    try {
      MailApp.sendEmail({
        to: recipient,
        subject: subject,
        body: body,
        attachments: options.attachments
      });
      if (status === "") {
        status = "Đã gửi";
      }
    } catch (e) {
      status = "Lỗi gửi email";
      Logger.log("Không thể gửi email tới " + recipient + " - " + e.message);
    }
  
    // Ghi trạng thái vào cột E (cột thứ 5)
    sheet.getRange(i + 2, 5).setValue(status);
  }
}

Chép dán tiếp code này vào:
JavaScript:
function onOpen(){
  let ui = SpreadsheetApp.getUi()
  ui.createMenu("Macro")
  .addItem("Gui email","sendEmails")
  .addToUi()
}
Reset file G. sheets của bạn, sẽ thấy menu có dạng kiểu thế này:
1774578959356.png
Chạy macro Gui email từ menu Macro mới tự tạo bên trên.

LƯU Ý: lấy link (url) file đính kèm từ Google Drive của chính tài khoản gửi mail băng cách chuột phải vào file -> Chia sẻ -> Sao chép liên kết. Tất nhiên trước đó bạn phải chia sẻ file công khai dạng có quyền xem khi có liên kết.
Bài đã được tự động gộp:

Gửi mail hàng loạt từ G.sheets tránh được việc phải cài và thiết lập Outlook lôi thôi và dễ mắc lỗi.
 
Lần chỉnh sửa cuối:
chòa bạn ! bạn hổ trợ giúp mình phần này với ạ ! minh chạy app strip mà cứ báo lỗi
1774853208446.png, mặc dù mình đã gán biến e rồi ! mình làm hồi ko dc , bạn hổ trợ mình với nha! thank bạn nhièu nha
 
chòa bạn ! bạn hổ trợ giúp mình phần này với ạ ! minh chạy app strip mà cứ báo lỗi
View attachment 311354, mặc dù mình đã gán biến e rồi ! mình làm hồi ko dc , bạn hổ trợ mình với nha! thank bạn nhièu nha
Có thể bạn chưa cấp quyền để chạy script. Chuyện này bạn phải lấy chính cái thông báo lỗi này để hỏi AI. Lỗi này phần ai nấy xử chứ trên máy khác tôi cũng chịu
 

Bài viết mới nhất

Back
Top Bottom