[Series Email] Bài 3: Gửi Email Cho Danh Sách Nhập Vào Từ Google Sheet
https://hocggsheet.com/gui-email-cho-danh-sach-nhap-vao-tu-google-sheet/
Last updated
https://hocggsheet.com/gui-email-cho-danh-sach-nhap-vao-tu-google-sheet/
Last updated
Trong bài lần này, mình sẽ chia sẻ về cách gửi email cho danh sách nhập vào từ Google Sheet. Ngoài ra, có một số lưu ý khi các bạn muốn kết hợp trigger onEdit và onOpen với hàm sendEmail()
File luyện tập (Tạo bản sao về Drive để sử dụng):
https://docs.google.com/spreadsheets/d/1sxxxA1MRgxoPeIdfs3QkN0IbtDYGNLmyYjeobQnkU9s/edit?usp=sharing
Cho file Google Sheet như sau
Mục đích của chúng ta là gửi nội dung ở cột Body cho các email tương ứng ở cột Email. Bắt đầu nhé!
01234567
function guiHet() { var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var lr = ss.getLastRow(); var email = ss.getRange(2,1,lr-1).getValues(); var subject = ss.getRange(2,2,lr-1).getValues(); var body = ss.getRange(2,3,lr-1).getValues();}
Sau khi mở Apps Script bằng cách vào phần Công cụ -> Trình chỉnh sửa tập lệnh. Ta tiến hành bước khai báo biến. Sử dụng các biến email, subject, và body để lấy danh sách email, chủ đề, và phần nội dung ở các cột A, B, và C
Tiếp đến, sử dụng vòng lặp for để gửi email cho từng địa chỉ ở cột A. Kết quả cuối cùng sẽ được như đoạn code sau:
01234567891011
function guiHet() { var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var lr = ss.getLastRow(); var email = ss.getRange(2,1,lr-1).getValues(); var subject = ss.getRange(2,2,lr-1).getValues(); var body = ss.getRange(2,3,lr-1).getValues(); for (var i = 0; i < email.length; i++) { MailApp.sendEmail(email[i], subject[i], body[i]); }}
Nếu muốn xuống dòng trong 1 ô của Google Sheet, bấm Alt + Enter
Bạn có thể format cho ô trong Google Sheet, nhưng khi lấy dữ liệu từ ô đó để gửi email, thì các kiểu định dạng của bạn sẽ bị mất đi. Để xem cách gửi email có format, mời các bạn xem bài 1
Một câu hỏi khác mà chắc nhiều bạn đã nghĩ tới khi đọc bài này. Đó là làm thế nào để tự động gửi email khi thay đổi một giá trị bất kì trong Apps Script? Hay thực tế hơn, chúng ta đã biết Google Sheet có thể liên kết biểu mẫu với Google Form. Sẽ thế nào nếu mỗi lần có người gửi form thì ta tự động gửi email cho người đó?
Theo tự nhiên thì có thể bạn sẽ nghĩ ngay đến 2 trigger cực kì thông dụng là onOpen và onEdit. Tuy nhiên thì thực tế sẽ làm bạn thất vọng thôi. Một lần nữa các trigger giới hạn chúng ta không thể làm được những điều trên. Nguyên nhân là vì các trigger không thể kết hợp được với các function sử dụng thông tin (identity) của người dùng. Khi các bạn dùng hàm sendEmail để gửi email, các bạn đã để Apps Script sử dụng email của các bạn với tư cách người gửi để gửi đi email đó. Nói cách khác, email của bạn chính là thông tin người dùng. Các bạn có thể đọc thêm về những thứ trigger giới hạn
Vậy nên kết hợp Google Form – onOpen – sendEmail là chuyện không thể. Tuy nhiên “gửi email xác nhận khi có người vừa gửi form” thì có thể thực hiện được. Một trong các cách đỡ nhức đầu nhất là nhờ sự can thiệp của bên thứ 3 – add-on.
Với từ khóa “Email confirmation” bạn sẽ tìm được cả tá những add-on giúp bạn thực hiện điều trên.
Các bạn có thể tìm hiểu về 2 add-on Email Notifications for Forms và Form Confirmation Emails (tải về miễn phí trực tiếp trong phần add-on của Google form).
Kết hợp gửi email với Google Form?
Add-on Email Notifications for Forms (max 20 email / ngày, trả phí để gửi nhiều hơn)Add-on Form Confirmation Emails (sử dụng thủ thuật để gửi email không giới hạn)