## 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

Ta sẽ thực hiện code tại đây

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ự:

- Đầ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

- sheet2

## Kết quả

email đã được gửi đến địa chỉ

## 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

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

dán đường link của trang tính đã sao chép

sau đó ta sẽ add số cột mà ta cần

rồi đổi tên trang tính, ta sẽ thấy dữ liệu được lưu trữ ở lido như dưới

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

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

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

Để 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

Xong nhé, chúc mn thành công dù chả có gì :))