---
# System prepended metadata

title: Gửi email từ Google sheet bằng Apps script và Lido

---

## 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ì :))

    
    
    
    
    
    



















