見出し画像

Google Apps Script(GAS)で解決!特定の人から届くGmailをLINEに通知する方法

はじめに:母のスマートウォッチの通知問題


母から「スマートウォッチに来る通知が多すぎて困っている」と相談されました。

必要なのは電話とLINEの通知だけ。
でも、特定の人からくるメール(Gmail)も見逃したくないとのこと。
一見すると些細な問題ですが、日常生活における小さなストレスは積もり積もって大きなものになり得ます。

この問題に直面し、私はふと思いました。
最近Udemyで学び始めたばかりのGoogle Apps Script(GAS)を使って、何か実際に動かせるものを作ってみたい。それがこの問題の解決につながるなら、一石二鳥!!プログラミングの勉強を始めたばかりの私にとって、これは絶好のチャンス。実際に手を動かし、学んだことを生かしてみる。やってみようと思いました!


解決策の探索


まずはインターネットで情報を探しました。
様々なブログを読み漁り、いくつかの方法が浮かび上がってきましたが、「Gmailに届いた特定のラベルのメールをLINEに通知する」という方法が一番有望に思えました。この記事です。

Google Apps Scriptのコーディングへの挑戦


しかし、実際にトライしてみると、思った以上に複雑。特にGoogle Apps Scriptのコーディングは初めての私には難しい部分もありました。そんな時、私はいつも通り、ChatGPTに助けを求めることにしました。

ChatGPTに疑問点を質問し、回答を得ながら、少しずつ理解を深めていきました。この相談を通じて、私は新しい知識を得ることができ、それが問題解決への大きな一歩となりました。

スクリプトの実装


ChatGPTと相談しながら、私はGoogle Apps Scriptのコーディングに挑戦しました。目的は、Gmailに特定のラベルが付いたメールが来た場合に、その内容をLINEに通知すること。
GmailのAPIを活用し、特定の条件に基づいてメールをフィルタリングし、それをLINE APIを通じて送信するスクリプトを作成しました。



var lineToken = "YOUR_LINE_NOTIFY_TOKEN"; // トークンをここに置き換える

var get_interval = 1; // 1分前からの新着メールを取得

function send_line(Me){
  var payload = {'message': Me};
  var options = {
    "method": "post",
    "payload": payload,
    "headers": {"Authorization": "Bearer " + lineToken}
  };
  UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}

function fetchContactMail(){
  var now_time = Math.floor(new Date().getTime() / 1000); // 現在時刻を取得
  var time_term = now_time - (60 * get_interval); // 秒数で取得間隔を設定

  var strTerms = 'is:unread label:"◯◯◯◯◯"'; // 検索条件
  var myThreads = GmailApp.search(strTerms);
  var myMsgs = GmailApp.getMessagesForThreads(myThreads);
  var valMsgs = [];

  for(var i = 0; i < myMsgs.length; i++){
    valMsgs[i] = " " + myMsgs[i].slice(-1)[0].getDate().getMonth() + "/" + myMsgs[i].slice(-1)[0].getDate().getDate()
      + " " + myMsgs[i].slice(-1)[0].getDate().getHours() + ":" + myMsgs[i].slice(-1)[0].getDate().getMinutes()
      + "\n[from]" + myMsgs[i].slice(-1)[0].getFrom()
      + "\n\n[subject]" + myMsgs[i].slice(-1)[0].getSubject();
      // + "\n\n[Message]\n" + myMsgs[i].slice(-1)[0].getPlainBody();
    myMsgs[i][0].markRead(); // メッセージを既読にする
  }

  return valMsgs;
}

function main(){
  var new_Me = fetchContactMail();
  if(new_Me.length > 0){
    for(var i = new_Me.length - 1; i >= 0; i--){
      send_line(new_Me[i]);
    }
  }
}


変更するのは以下の2箇所

  1. var lineToken = "YOUR_LINE_NOTIFY_TOKEN"; のYOUR_LINE_NOTIFY_TOKENに自分の発行されたトークンを入力します。

  2. var strTerms = 'is:unread label:"◯◯◯◯◯"'; // 検索条件 の
    ◯◯◯◯◯◯にLINEに通知したいラベル名を入力します。

スクリプトのテストと調整


「未読」かつ「◯◯◯◯◯◯」というラベルが付いたメールに対してLINE通知を送信するようにスクリプトを書いていますが、テストをするために、一旦「未読(unread label)」から「既読」に変更してみました。

function fetchContactMail(){
  // 他のコード部分...

  // 検索条件を「既読」かつ「ワークスペース」ラベルのメールに変更
  var strTerms = 'label:"******" -is:unread'; // 変更された検索条件

  // 以下のコードは変更なし
  var myThreads = GmailApp.search(strTerms);
  // その他の処理...
}

成功の瞬間と学び


最初はエラーが頻発し、ChatGPTに質問しながら、コードを見直しました。そして、ついにスクリプトが正常に動作し、母のスマートウォッチに必要な通知だけが届くようになった瞬間は、まさに感動ものでした!

自分の手で問題を解決できたこと、そして新たなスキルを身につけることができた喜びは、何物にも代えがたいものがあります。

まとめとこれから


ただ技術的な問題を解決しただけでなく、新しいスキルを実際の問題解決に活用できたという自信と、日常生活における小さな不便さをテクノロジーで解消できる可能性の発見でした。
母のスマートウォッチの通知問題を解決したことで、母の日常が少し快適になったと感じると、私自身も大きな満足感を得ることができました。
私にとってテクノロジーを学び、適用する喜びを改めて教えてくれました。そして、この体験はこれからも新しいことに挑戦し続けるモチベーションとなると思うのです。


追記

メールのタイトルだけでなく、本文も一緒に通知させてよ!と母からリクエストをもらったので、少しコードを追加しました。

"\n\n[Message]\n" + myMsgs[i].slice(-1)[0].getPlainBody();

メール本文についての情報
function fetchContactMail(){
  // ...[既存のコード]...

  for(var i = 0; i < myMsgs.length; i++){
    valMsgs[i] = " " + myMsgs[i].slice(-1)[0].getDate().getMonth() + "/" + myMsgs[i].slice(-1)[0].getDate().getDate()
      + " " + myMsgs[i].slice(-1)[0].getDate().getHours() + ":" + myMsgs[i].slice(-1)[0].getDate().getMinutes()
      + "\n[from]" + myMsgs[i].slice(-1)[0].getFrom()
      + "\n\n[subject]" + myMsgs[i].slice(-1)[0].getSubject()
      + "\n\n[Message]\n" + myMsgs[i].slice(-1)[0].getPlainBody(); // この行を追加
    myMsgs[i][0].markRead(); // メッセージを既読にする
  }

  return valMsgs;
}

ーーーーーーーーーー
私の書いた本が出版されました!
\Twitterからうまれた/
ちょっと理系なおうち遊びの本

Amazon 売れ筋ランキング  
幼児教育 カテゴリー  有料Top100
ベストセラー1位✨ になりました!
ありがとうございます!

KindleUnlimited, ペーパーバックでも読めます!




この記事が気に入ったらサポートをしてみませんか?