Trong bài này tôi sẽ hướng dẫn các bạn làm quen các thao tác để có thể tạo ngay một chương trình dùng Google App Scipt đầu tiên. Tôi sẽ xây dựng một ứng dụng rất hữu ích đó là Merge mail (trộn thư) và gửi email tự động.
Trộn thư (merge mail) tức là lấy thông tin của từng người nhận trong một danh sách, điền vào những vị trí thích hợp trong email mẫu, để tạo ra cho mỗi người một email riêng có thông tin liên quan trực tiếp đến họ rồi gửi đi.
Hướng dẫn này mặc định dành cho người chưa từng biết gì về vấn đề này nên mang tính chất cầm tay chỉ việc với nhiều hình ảnh. Bước nào các bạn biết rồi thì có thể lướt qua.
Ứng dụng này sẽ sử dụng 3 dịch vụ của Google gồm Spreadsheet, Gmail và Form.
Mô tả cụ thể:
Bạn sẽ tạo 1 Spreadsheet với 2 sheet. Một chứa danh sách về thông tin người nhận, một chứa nội dung email mẫu với các trường cần trộn.
Bạn sẽ viết chương trình để hệ thống tự động trộn email và gửi email cho toàn bộ danh sách vào một thời gian nhất định hoặc khi bạn yêu cầu thông qua 1 Form.
Các bước tiến hành.
Bước 1: Tạo 1 Spreadsheet gồm 2 sheet
- Một sheet tên “Data” chứa danh sách email và các thông tin của người nhận để trộn.
- Sheet còn lại tên “Template” chứa email mẫu và một số thông tin khác như tiêu đề email và tên hiển thị của người gửi.
Bước 2: Viết code để có thể merge mail và gửi email.
Bước 3: Test code gửi email.
Bước 4: Thiết lập thời gian để phần mềm tự động gửi email.
Bước 5: Xây dựng một Form để có thể ra lệnh cho phần mềm gửi email.
Bước 6: Link Form với Spreadsheet và thiết lập để phần mềm thực thi lệnh gửi email khi nộp Form.
Bước 1: Tạo Spreadsheet và 2 sheet Data và Template. Nhập dữ liệu cho 2 sheet này.
Vào trang: spreadsheet.google.com
Nếu bạn chưa đăng nhập hãy đăng nhập tài khoản Gmail của bạn.
Chọn tạo 1 Spreadsheet trống mới
Thêm 1 sheet mới và Rename 2 sheet thành “Data” và “Template” (dĩ nhiên không có dấu “”).
Lưu ý: do tên 2 sheet có sử dụng trong Script nên hãy đổi tên cho đúng: Data và Template.
Nhập liệu vào các sheet trong đó:
- Sheet Data: Địa chỉ email ở cột đầu tiên, các cột sau có thể thay đổi nội dung tùy theo nhu cầu thực tế.
- Sheet Template với tên hiển thị khi gửi email ở cột B1, tiêu đề để gửi email ở B2 và nội dung Email mẫu ở B3.
- Lưu ý 1: một trường nào đó dùng để trộn thư trong email mẫu sẽ có dạng ${“FIELD”}, ví dụ trường Tên thì sẽ được viết trong email mẫu là ${“Tên”}.
- Lưu ý 2: Tên người gửi ở ô B1 là tên người gửi sẽ hiển thị trong hộp thư của người nhận thay cho địa chỉ email của bạn.
Bước 2: Viết code để có thể merge mail và gửi email.
Từ menu Tools >> Script Editor…
Hãy xóa tất cả những code đang có trong Script và copy đoạn code có trong link này vào Script (nhớ là chỉ copy đoạn code nằm giữa dấu “” lớn). Bạn có thể tìm hiểu thêm về ý nghĩa và các hàm của đoạn code sau. Bây giờ, chúng ta cần làm code chạy trước đã.
Sau khi dán vào bạn nên bấm Ctrl + A để tô toàn bộ code rồi nhấn Tab để tự động định dạng lại code cho dễ nhìn.
Sau đó bạn hãy nhấn Ctrl + S hoặc menu File >> Save để lưu file code lại.
Một hộp thoại sẽ xuất hiện để hỏi tên file Script.
Hãy đặt tên cho file để lưu lại.
Bước 3: Chạy thử code đã lưu.
Đến bước này bạn đã có thể cho code chạy. Mục đích là test thử trước khi bạn setup thời gian cho code chạy tự động hay link với Form để ra lệnh cho code.
Cách chạy code thử như sau: Đầu tiên, chọn hàm cần chạy.Trong chương trình đã lưu có nhiều hàm, nhưng ở đây ta chỉ cần test thử hàm sendEmail là đủ (vì các hàm kia chỉ là các hàm con phục vụ cho sendEmail.
Sau khi chọn hàm sendEmail, hãy bấm nút Run.
Một hộp thoại sẽ xuất hiện để đòi cấp quyền cho ứng dụng. Code chúng ta viết cần phải đọc file, phải dùng Gmail gửi thư, do đó, cần phải được cấp quyền để chạy.
Hãy bấm Review Permissions. Một hộp thoại lại xuất hiện yêu cầu bạn chọn tài khoản. Hãy chọn đúng tài khoản của bạn.
Đến bước này, có thể sẽ xuất hiện một hộp thoại cảnh báo. Cảnh báo rằng việc này có thể gây nguy hiểm cho bạn.
Cần nói rõ việc này một chút: khi bạn viết Script cho các ứng dụng thì bản thân các việc đó đã là một mối nguy hiểm. Nếu code bạn lấy “không sạch”, thì nó có thể lấy cắp thông tin về danh bạ, email… của bạn chẳng hạn.
Xin khẳng định lại là toàn bộ Code ở bước 2 phía trên hoàn toàn là code sạch. Bạn hoàn toàn có thể yên tâm để vượt qua bước này.
Chọn Addvanced >> Go to (tên file của bạn).
Tới đây thì một hộp thoại thông báo về các quyền cần được cấp cho ứng dụng hiện ra. Bạn hãy đồng ý cấp quyền cho nó (xin khẳng định lại là với code ở bước 2 thì hoàn toàn an toàn).
Đến đây thì hàm sendEmail đã được cấp đầy đủ quyền để chạy. Nếu không có gì sai ở dữ liệu trong 2 sheet Data và Template thì nó sẽ trộn email và gửi đi. Bạn có thể quan sát kết quả trong hộp thư đã gửi (Sent) trong Gmail của bạn.
Bước 4: Thiết lập thời gian để phần mềm tự động gửi email.
Nếu bạn làm thành công đến bước 3, có nghĩa là bạn đã làm thành công chương trình trộn và gửi email. Bạn có thể chạy thủ công chương trình này bằng cách vào Script, chọn hàm sendEmail rồi Run.
Ở bước này tôi bổ sung thêm 1 tính năng, đó là hẹn giờ chạy code. Thay vì bạn phải làm bằng tay như bước 3 thì ở đây chương trình sẽ được tự khởi chạy khi đến giờ hẹn.
Cách làm như sau: Từ menu Edit (Chỉnh sửa) >> Current project’s triggers (Các kích hoạt của dự án hiện tại).
Đây chính là nơi bạn kích hoạt những tính năng chạy tự động của dự án. Hàm nào sẽ được gọi chạy tự động khi nào?
Bấm vào No Triggers set up. Click here to add one now để tạo ra một kích hoạt đầu tiên.
Ở mục Run bạn sẽ chọn hàm muốn cài đặt, ở đây là sendEmail. Ở phần Events bạn sẽ thấy có 2 hướng kích hoạt hàm: 1 là theo thời gian (Time driven), 2 là theo bảng tính (From Spreadsheet). Cụ thể:
1.Theo thời gian (Time – driven): chọn bao nhiêu lâu thì gọi chương trình lại một lần.
- Vào 1 ngày giờ cụ thể (Specific Date and time).
- Đồng hồ tính theo phút (Minutes timer): mỗi 1 phút hay 5, 10, 15, 30 phút – thực hiện 1 lần.
- Đồng hồ tính theo giờ (Hour timer): mỗi 1 giờ hay 2, 4, 6, 8, 10, 12 giờ – thực hiện 1 lần.
- Đồng hồ tính theo Ngày (Day timer).
- Đồng hồ theo Tuần (Week timer).
- Đồng hồ theo tháng (Mouth timer).
2.Từ bảng tính (From Spreadsheet): Khi có một sự kiện liên quan tới file Spreadsheet:
- Khi mở Spreadsheet (On Open)
- Khi chỉnh sửa Spreadsheet (On Edit).
- Khi thay đổi Spreadsheet (On Change).
- Khi có một form được nộp vào (On form submit).
Với ví dụ này, tôi chọn hàng ngày sẽ gửi email 1 lần vào lúc từ 7 đến 8 giờ sáng như hình minh họa ở trên.
Sau khi thiết lập thì bạn hãy lưu lại. Như vậy, hàng ngày, cứ trong khoảng thời gian từ 7 đến 8 giờ sáng là hệ thống tự động trộn và gửi email, không cần bạn phải ra lệnh, không cần bạn phải online hay mở máy tính lên gì cả. Vì chương trình nó nằm trên mây.
Bước 5: Tạo 1 Form để link với Spreadsheet để gọi chương trình chạy khi cần.
Đến sau bước 4 thì chương trình của bạn đã có thể chạy tự động theo thời gian. Tuy nhiên, bạn muốn tạo ra một Form để khi bạn hoặc một người nào khác muốn gọi chương trình chạy thì bạn cần đến bước này: tạo 1 form.
Bạn mở Tab mới trên trình duyệt để làm với Form (trong khi vẫn giữ các tab cũ của Spreadsheet) để thay đổi khi cần. Trong tab mới bạn vào link sau: forms.google.com
Ở đây, ban tạo mới 1 Form trống
Rồi thêm vào Form 1 câu hỏi dạng lựa chọn trắc nghiệm (Multi Choice) như hình.
Sau đó bạn Rename form lại cho dễ nhớ:
Đến đây, việc tạo form đã xong.
Bước 6: Liên kết Form với Spreadsheet và hoàn thành dự án.
Trong tab chỉnh sửa Form, bạn bấm vào Responses (Câu trả lời) rồi bấm vào biểu tượng bảng tính Spreadsheet.
Một hộp thoại sẽ xuất hiện để hỏi bạn muốn liên kết form với một Spreadsheet mới hay với một Spreadsheet đã tồn tại. Ở đây mình phải chọn liên kết Form với một Spreadsheet đã tồn tại để link form với Speadsheet mình đang làm.
Sau đó bạn trỏ đến Spreadsheet mà mình đang làm nãy giờ.
Như vậy, bạn đã liên kết xong giữa Form, và Spreadsheet. Bạn cần bấm vào nút Preview (biểu tượng con mắt) ở phía trên, bên phải của giao diện form để xem form hoàn chỉnh. Tại trang xem form này bạn cần copy đường link lại để từ nay bạn có thể theo link đó mà điền vào form.
Bước cuối cùng, quay trở lại trang Script, từ menu Edit >> Current project’s triggers và kích hoạt thêm hàm formSubmit sẽ được gọi khi một có một sự kiện là có 1 form được nộp vào Spreadsheet.
Sau đó bạn lưu lại, giờ mọi việc đã xong. Từ đường link của Form mà bạn đã lưu lại từ bước bấm nút Preview hình con mắt, bạn có thể điền vào Form và nộp. Hệ thống sẽ nhận lệnh và gửi Email.Giờ bạn chỉ cần có đường link của Form, bạn có thể ra lệnh cho hệ thống gửi email bằng điện thoại, tablet hay bất cứ thiết bị nào có thể kết nối mạng.
Còn về chi tiết của file code, chắc chúng ta cần nhiều thời gian hơn để nói rõ hơn.
Như vậy, khi bạn cần gửi email hàng loạt, bạn chỉ cần thay đổi danh sách người nhận trong sheet Data và định dạng email mẫu trong sheet Template rồi dùng nút Run trong Script gọi chạy (như bước 3).
Nếu muốn lặp lại việc gửi email theo thời gian, bạn kích hoạt tính năng gọi chạy theo thời gian (như bước 4).
Nếu muốn gọi chạy việc gửi email từ các thiết bị như điện thoại (không vô Script được) hoặc để đưa cho một người khác sử dụng, bạn chỉ cần đưa link của Form đã thiết lập ở bước 5, 6 cho họ.
Tổng hợp link cần sử dụng:
- Tạo Spreadsheet: spreadsheets.google.com
- Code chương trình merge mail: http://nguyencong.com/code-tron-email/
- Tạo Form: forms.google.com
Chúc bạn thực hiện thành công để có thể có một chương trình trộn thư online cho riêng mình.
mình dùng google drive form biểu mẫu để nhập dữ liệu và 1 trang tính để lưu dữ liệu từ form mẫu. Trong trang tính mình có làm công thức nhưng mỗi lần nhập thêm dữ liệu từ form mẫu thì mình mất công thức này ( nó tự động chèn thêm hàng) , Bạn có cách nào giúp mình với. Thanks
Hi anh,
Em đã chạy được script trộn và gửi email rất thành công ạ. Cảm ơn anh.
Hiện em muốn hoàn thiện chức năng này tốt hơn giống như là: những chữ in đậm trong excel thì có thể in đậm trong mail hay mình có thể chỉnh format của email tự động đó. Không biết anh có cách nào có thể làm được không ạ?
Cảm ơn anh.
Được bạn. Thực ra thì bạn muốn định dạng email thế nào cũng được (hình ảnh, màu sắc, cỡ chữ, font chữ…). Có điều code sẽ phải khác đi một tý thôi…
Chào bạn, mình muốn làm 1 form mà khi có ai trình báo thì sẽ thực thi công việc trộn và gửi mail như của bạn đã làm, nhưng khác 1 chỗ đó là khi người trình form 1 lần thì nó chỉ gửi nội dung cho đúng 1 hàng (row) vào ngay thời điểm đó thôi chứ ko gửi hàng loạt cho tất cả mọi người. Và mình muốn có thêm 1 cột ghi nhận là đã gửi mail ở kế bên được ko? Đề xác nhận những hàng nào đã thực thi thì ko thực hiện lại nữa. Xin cám ơn và chờ hồi âm
Cảm ơn anh về chia sẻ hữu ích này, nó rất có ý nghĩa với em, chân thành cảm ơn anh, chúc anh sức khỏe và thành công ạ