Gửi tin nhắn SMS thông báo có mail mới từ Gmail

Gửi tin nhắn SMS thông báo có mail mới từ GmailBạn muốn Gmail gửi tin nhắn SMS thông báo mỗi khi bạn có email mới hoặc thông báo mỗi khi có email từ một người quan trọng nào đó ? Hồi xưa, tôi đã giới thiệu cách làm với hộp mail Yahoo kết hợp với hộp mail của Mobifone. Hôm nay, tôi sẽ giới thiệu cách làm với Gmail.

Cách làm này sử dụng Goolge Script kết hợp với tính năng nhắc nhở bằng tin nhắn SMS của Goolge Calendar. Bạn có thể tùy ý đưa ra điều kiện nhận tin nhắn, đại loại như là sẽ nhận được SMS nếu :

– Có mail mới, mỗi email gửi 1 tin nhắn với nội dung là tiêu đề của mail đó
– Có mail mới trong 1 label cố định đã được định nghĩa bằng cách sử dụng filter.

Tuy nhiên Goolge có hạn chế số lượng SMS gửi hằng ngày, vậy nên tốt nhất là viết một đoạn mã sao cho Goolge chỉ gửi 1 tin nhắn SMS thông báo có email mới, cho dù bạn đã nhận được 100 email đi chăng nữa.

Kịch bản trong bài viết này là :

Cứ vào khoảng 1 tiếng, Goolge sẽ kiểm tra hộp thư của bạn. Nếu phát hiện có mail mới, Goolge sẽ gửi một tin nhắn SMS vào điện thoại của bạn với nội dung do bạn soạn thảo hoặc sẽ lấy tiêu đề của email mới nhất làm nội dung tin nhắn

Cách làm như sau :

1. Kết nối điện thoại với tài khoản Goolge Calendar :
– Truy cập vào : google.com/calendar > đăng nhập vào tài khoản của bạn > vào “Calendar Settings” > chọn thẻ “Mobile Setup” :

Gửi tin nhắn SMS thông báo có mail mới từ Gmail

– Nhập vào số điện thoại của bạn, bấm “Send verification code” > nhập dãy số bạn nhận được từ điện thoại vào ô “Verification code” > bấm “Finish setup”

2. Viết Google Script :

– Truy cập vào : script.google.com > bấm “Start Scripting” nếu bạn thấy > hộp thoại hiện ra :

Gửi tin nhắn SMS thông báo có mail mới từ Gmail

– Chọn “Gmail” và Google sẽ mở trang soạn thảo với nhiều hàm có sẵn, bạn hãy xóa trắng nội dung và thay bằng đoạn mã sau :

function SendSMS() {
var thread = GmailApp.getInboxThreads(0, 1);
if (thread.length != null)
{
if (thread[0].isUnread())
{
if (thread[0].getLabels()[0] == null || thread[0].getLabels()[0].getName() != "TempLabel")
{
thread[0].addLabel(GmailApp.createLabel("TempLabel"));
var smsContent = thread[0].getMessages()[0].getSubject();
var now = new Date().getTime();
CalendarApp.createEvent(smsContent, new Date(now+60000), new Date(now+60000)).removeAllReminders().addSmsReminder(0);
}
}
}
};

Đoạn mã trên sẽ kiểm tra email mới nhất mà bạn có. Nếu email này vẫn chưa được đọc thì nó sẽ tiến hành gửi tin nhắn SMS thông báo cho bạn, đồng thời gán cho email mới nhất này cái nhãn tôi tạm gọi là “TempLabel”. Những lần sau, nó sẽ dựa vào nhãn này để xem có thêm email mới nào không, nếu có nó sẽ gửi tin nhắn, ngược lại sẽ không làm gì cả.

Bạn bấm vào biểu tượng Save > đặt tên và lưu lại. Sau đó bấm Run > chọn SendSMS để chạy thử > bạn sẽ được yêu cầu xác thực (chỉ lần chạy đầu tiên) > xác thực xong thì chạy lại và đợi khoảng 1 phút bạn sẽ thấy điện thoại nhận được tin nhắn như sau :
xxx

3. Tạo Trigger :
Sau khi viết xong đoạn mã bên trên, bạn cần phải tạo một trigger để chương trình tự động chạy theo lịch hàng ngày, hàng tuần hay hàng tháng. Từ giao diện Google Script bên trên, bấm vào menu “Resources” > chọn “Current project’s triggers” > hộp thoại hiện ra :

Gửi tin nhắn SMS thông báo có mail mới từ Gmail

– Chọn “…Click here to add one now” > chọn các thông số, nếu bạn muốn kiểm tra hộp mail mỗi giờ thì chọn như sau :

Gửi tin nhắn SMS thông báo có mail mới từ Gmail

– Xong bấm nút Save

Toàn bộ đoạn mã :

Gửi tin nhắn SMS thông báo có mail mới từ Gmail

Như tôi đã nói bất kể bạn nhận được bao nhiêu email mới thì đoạn mã bên trên, khi chạy, chỉ lấy ra tiêu đề email mới nhất và gửi duy nhất 1 tin nhắn thông báo cho bạn.

Bạn có thể chỉnh sửa đoạn mã để làm việc theo ý của bạn. Hoặc nếu bạn muốn nhận được tin nhắn SMS cho những email quan trọng thì hãy tạo một nhãn email (label) sử dụng bộ lọc email, sau đó chỉnh sửa đoạn mã để nó chỉ gửi tin nhắn nếu email được gắn một nhãn nào đó do bạn qui định.

14 Comments
  1. anh làm thử hướng dẫn cho phần một nhãn email được không ?

    • Em tạo ra một nhãn email. Sau đó thay “Tên_Label” bằng tên nhãn em đặt vào đoạn code sau :
      function SendSMSByLabel() {
      var thread = GmailApp.getInboxThreads(0, 1);
      if (thread.length != null)
      {
      if (thread[0].isUnread())
      {
      if (thread[0].getLabels()[0] != null && thread[0].getLabels()[0].getName() == "Tên_Label")
      {
      var smsContent = thread[0].getMessages()[0].getSubject();
      var now = new Date().getTime();
      CalendarApp.createEvent(smsContent, new Date(now+60000), new Date(now+60000)).removeAllReminders().addSmsReminder(0);
      }
      }
      }
      };

  2. Thanks, anhhangxom có thể chỉnh sửa code cho nhãn Primary của gmail được không?

  3. xin cảm ơn 😀

  4. cám ơn anh nhiều

  5. Làm sao để huỷ đây ahx, hic

  6. Đoạn này hiểu như thế nào hả anh: new Date(now+60000), new Date(now+60000)
    Em chọn thiết lập cứ 15 phút thì chạy script 1 lần thì phải sửa như thế nào ạ?

    • Để gửi được tin nhắn SMS thì buộc phải tạo ra một tác vụ trên Calendar của Google. Tạo tác vụ bằng code thì phải qui định thời gian bắt đầu và kết thúc. Theo logic thì mỗi lần đoạn script này chạy thì sẽ tạo ra một tác vụ trên Calendar. Nhưng nếu chỉ sử dụng new Date(now) thì tác vụ sẽ không bao giờ chạy được do bị trễ về thời gian thực hiện. Do đó phải cộng thêm 60000ms=1 phút. Tức là sau khi đoạn script này được thực thi thì 1 phút sau Google mới tạo ra sự kiện gửi SMS trên Calendar -> việc này nhằm đảm bảo tác vụ chắc chắn sẽ được khởi tạo, ít bị ảnh hưởng bởi độ trễ.

      Việc qui định thời gian chạy script (tức là thời gian tự động check mail) em chỉ có thể chọn ở phần Trigger anh đề cập bên trên chứ hoàn toàn không liên quan gì tới nội dung của đoạn script cả.

  7. Muốn chỉ thông báo những email có đuôi @gmail.com thì phải làm sao

  8. hay quá, mình làm được rồi, nhưng sao nó gửi chỉ 1 nội dung mail thui

  9. sao mình làm k được nhỉ?

Trả lời Khang Huỷ phản hồi