## Giới thiệu chung về Apps script Mn có thể tham khảo 1 số link dưới đây để hiểu rõ hơn về việc sử dụng **Apps Script** để gửi nhiều mail 1 lúc thông qua liên kết với Trang tính - https://aryanirani123.medium.com/google-sheets-automation-using-google-apps-script-9c830256b9f6 - https://www.youtube.com/watch?v=rdrJxLIBwxc - https://github.com/john0isaac/Google-Apps-Script-Send-Custom-Emails Để có thể sử dụng apps script, tại Trang tính, chọn phần tiện ích ![image](https://hackmd.io/_uploads/Skpmho8fA.png) Ta sẽ thực hiện code tại đây ![image](https://hackmd.io/_uploads/rkJuhoLfC.png) google script thực chất là js mở rộng với một số tính năng và function Trong gs có hàm **Logger.log()** để đưa ra giá trị ta muốn đưa ra màn hình (tương tự `console.log`) Để tương tác được với sheet, làm việc được với đúng địa chỉ cụ thể (ô, cột hàng, vùng ...) trên 1 sheet, ta cần phải gọi đúng theo thứ tự: ![Screenshot 2024-05-07 003649](https://hackmd.io/_uploads/r1CU_iUfC.png) - Đầu tiên là gọi **gg sheet application** ```javascript var app = SpreadsheetApp; ``` - Sau đó chỉ rõ làm việc với **Spreadsheet** nào ```javascript var spreadSheet = app.getActiveSpreadsheet(); // ở đây là tham chiếu đến spreadsheet đang hoạt động ``` - Rồi đến làm việc với sheet nào, trên sheet đó làm việc với vùng nào ```javascript var sheet1 = spreadSheet.getSheetByName('sheet1'); var sheet2 = spreadSheet.getSheetByName('sheet2'); ``` Trên đây là cách để ta có thể tham chiếu đến sheet mà ta cần làm việc Tiếp đến, ta sẽ tìm hiểu 1 số hàm để phục vụ cho mục đích gửi nhìu mail 1 lúc - `getRange(row, column)` : lấy vùng, phạm vi cần làm việc trên sheet - `getValue()` : lấy giá trị tại phạm vi chọn - `MailApp` : gửi email - `sendEmail(addressEmail, subject, message)` : gửi một tin nhắn email ## Code Vậy là các hàm cần thiết cũng đã biết rùi, giờ là phần code ```javascript function sendEmail() { var ss = SpreadsheetApp.getActiveSpreadsheet() var sheet1=ss.getSheetByName('Sheet1'); var sheet2=ss.getSheetByName('Sheet2'); var subject = sheet2.getRange(2,1).getValue(); var n=sheet1.getLastRow(); for (var i = 2; i < n+1 ; i++ ) { var account = sheet1.getRange(i,1).getValue(); var password = sheet1.getRange(i,2).getValue(); var message = sheet2.getRange(2,2).getValue(); message=message.replace("<account>",account).replace("<password>",password); MailApp.sendEmail(account, subject, message); Logger.log("đã gửi xong email " + account + " với nội dung \n" + message) } } ``` Ở Trang tính, sheet1 ta sẽ có 2 cột là địa chỉ email và passwd, còn ở sheet2 sẽ có tiêu đề và nội dung email - sheet1 ![image](https://hackmd.io/_uploads/HJC6DiLM0.png) - sheet2 ![image](https://hackmd.io/_uploads/SkWfuoIzR.png) ## Kết quả ![image](https://hackmd.io/_uploads/rkJBtsIzA.png) email đã được gửi đến địa chỉ ![image](https://hackmd.io/_uploads/HyWvKjUG0.png) ## Tìm hiểu thêm về Lido https://www.lido.app/tutorials/automatically-send-email-from-google-sheets Dùng **Lido** có thể dễ hơn, không cần phải viết code, mn tham khảo nhé! Đầu tiên tạo 1 trang tính, sau đó t lấy đường link của trang tính đó, nội dung trang tính giả sử có email và pass ![image](https://hackmd.io/_uploads/rkbUKSDzC.png) Sau đó ta sẽ đăng kí 1 tài khoản của Lido, link đăng kí https://www.lido.app/go/signup Sau đó cọn Connect Data để kết nối dữ liệu với Trang tính ![image](https://hackmd.io/_uploads/rkH49HvMC.png) dán đường link của trang tính đã sao chép ![image](https://hackmd.io/_uploads/BycN5rDzA.png) sau đó ta sẽ add số cột mà ta cần ![image](https://hackmd.io/_uploads/HJXA9BvMC.png) rồi đổi tên trang tính, ta sẽ thấy dữ liệu được lưu trữ ở lido như dưới ![image](https://hackmd.io/_uploads/HyeRboBDzC.png) tiếp đó, ta sẽ tạo 1 trang tính mới với 2 cột là tiêu đề và nội dung gửi ![image](https://hackmd.io/_uploads/HJRtorDz0.png) sau đó, để tham chiếu 2 cột subject và message đến trang tính email, ta sử dụng ***=STRINGTEMPLATE("email_body_cell")*** ở đây, nội dung subject và message ở dòng 2 cột A,B nên ta sẽ tham chiếu tuyệt đối như sau ```javascript =STRINGTEMPLATE(Sheet1!$A$2) // tại C2 của sheet email =STRINGTEMPLATE(Sheet1!$B$2) // tại D2 của sheet email ``` đến đây, tại sheet email sẽ hiển thị như vầy ![image](https://hackmd.io/_uploads/HJo4arPMR.png) tiếp đó, để gửi mail, ta sẽ sử dụng **=SENDGMAIL(<sender-credential>, recipient, subject, body, status_cell)** - Sender-credential : địa chỉ email của bạn - recipient : địa chỉ email cần gửi - subject : tiêu đề thư - body : nội dung thư như vậy, ta có như sau ```javascript =SENDGMAIL("your@gmail.com",A2,C2,D2) ``` Vậy là hoàn thành rồi ![image](https://hackmd.io/_uploads/B1lJy8wzA.png) Để gửi hết cái email ta chọn nhấn vào dấu 3 chấm tại cột E1 rồi chọn run column now ![image](https://hackmd.io/_uploads/S1hz1UDfR.png) Xong nhé, chúc mn thành công dù chả có gì :))