Gmailを受信したらLINEに通知する方法【Google Apps Script】

プログラミング

この記事は、Gmailでメールを受信したら、LINEに件名や内容を通知する方法について書いています。

上記を実装するうえで、

  • Gmail
  • Google Apps Script(以下「GAS」)
  • LINE
  • LINE Notify

を利用します。

以下の記事では、Googleカレンダーの予定を開始前にLINEで通知する方法について書いているので、興味のある方はご覧ください。

Googleカレンダーの予定を開始15分前とか1時間前にLINEで通知する方法【Google Apps Script】




Gmailを受信したらLINEに通知する方法

以下、ざっくりと手順を載せておきます。

  • ①LINE Notifyで通知するためのトークンを取得する
  • ②GASで通知用のコードを書く
  • ③GASで通知するタイミング(間隔)を指定する

という感じです。

この記事では、受信したGmailの取得に関するコード以外はあまり触れないので、「GASでLINEに通知する」という基本的な部分は、以下の記事を参考にしてください。

はじめての人は、実際に手を動かして試してみると分かりやすいかと。

LINEで自動的にメッセージを定期送信する方法【LINE Notify, Google Apps Script】

もしGoogleアカウントもってないよという方は、以下のGoogleの公式ページから、アカウントの作成をしてください。

Googleアカウント

Gmail通知用のGoogle Apps Scriptコード

以下、コード全文です。

3行目の「const token = “★LINE Notifyのトークン★”;」の星マークで囲っているところに、取得したトークンを記入すればOKです。

// Lineに通知 ------------------------------//
function send(content) {
  const token = "★LINE Notifyのトークン★";
  const options = {
    "method" : "post",
    "payload" : "message=" + content,
    "headers" : {"authorization" : "Bearer " + token}
  }

  UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options)
}


// メールの受信処理 ------------------------------//
function fetchGmail() {
 
  //取得間隔
  const minutes = 1;
  const now = Math.floor(new Date().getTime() / 1000);
  const interval = now - (60 * minutes);

  //取得条件
  const terms = '(is:unread after:'+ interval + ')';

  //取得
  const threads = GmailApp.search(terms);
  const emails = GmailApp.getMessagesForThreads(threads);

  const value = [];

  if(emails) {
    for(const i in emails) {
      // 各要素を取得
      const email = emails[i][0];
      const dateAndTime = (email.getDate().getMonth() + 1) + "月" + (email.getDate().getDate()) + "日 "
                      + (email.getDate().getHours()) + "時" + (("00" + email.getDate().getMinutes()).slice(-2)) + "分";
      const sender = email.getFrom();
      const subject = email.getSubject();
      const text = email.getPlainBody().slice(0,100);

      // 整形
      value[i] = "\n"
              + dateAndTime + "\n"
              + "▼from\n" + sender + "\n\n"
              + "▼sbject\n" + subject + "\n\n"
              + "▼Message\n"+ text
    }

    return value;
  }
}

// 受信メールの確認とLINEへの通知処理 ------------------------------//
function checkMail() {
  const result = fetchGmail()

  if(result.length > 0){
    for(const i in result) {
      send(result[i]);
    }
  }
}

ここからはいくつか調整できるポイントを紹介します。

  • ① メールの取得間隔
  • ② メールの取得条件
  • ③ 表示する内容

① メールの取得間隔

//取得間隔
const minutes = 1;
const now = Math.floor(new Date().getTime() / 1000);
const interval = now - (60 * minutes);

現在時刻から何分前までに受信したメールを取得するかを設定してます。

minutesには分単位で入力してください。

上記の場合は現在時刻から1分前までに受信したメールを取得するという設定です。

5分前までのメールを受信したいという場合は、1行目を「minutes = 5;」としてください。

② メールの取得条件

//取得条件
const terms = '(is:unread after:'+ interval + ')';

この部分です。

「is:unread」で未読のメールのみ取得指定しています。

既読のメールも取得したい場合は、上記の「is:unread」を消してください。

「’after:’+ interval」で①で指定した1分前までの指定をしています。

他には以下のような条件を加えることができます。

  • 送信者を指定する→「from:送信者」
  • 件名を指定する→「subject:件名」

みたいな感じです。

以下の記事がたくさんの条件を分かりやすく記載していたので紹介しておきます。

TD SYNNEX BLOG:Gmailの検索と内容取得をするGAS

③表示する内容

// 各要素を取得
const email = emails[i][0];
const dateAndTime = (email.getDate().getMonth() + 1) + "月" + (email.getDate().getDate()) + "日 "
                  + (email.getDate().getHours()) + "時" + (("00" + email.getDate().getMinutes()).slice(-2)) + "分";
const sender = email.getFrom();
const subject = email.getSubject();
const text = email.getPlainBody().slice(0,100);

// 整形
value[i] = "\n"
         + dateAndTime + "\n"
         + "▼from\n" + sender + "\n\n"
         + "▼sbject\n" + subject + "\n\n"
         + "▼Message\n"+ text

「// 各要素を取得」の下の各行で取得したものを変数に入れています。

以下のような感じです。

  • dateAndTime=日時
  • sender=送信者
  • subject=件名
  • text=本文

そして、「// 整形」のところで、改行とかいれてLINEに送られるメッセージを見やすいように整形しています。

不用な項目は削除したり、改行を調整したり、テキストを入れたりしてください。

改行は「\n」です。

トリガーの設定とまとめ

コードの入力が終わったら、トリガーを設定しましょう。

トリガーの設定

GASの左側のメニューアイコンにカーソルを合わせると、以下の画像のように右側にメニューが伸びます。

「トリガー」→「トリガーの追加」とクリックしてください。

設定は以下の通りです。

実行する関数を選択実行する関数
実行するデプロイを選択Head
イベントのソースを選択時間主導型
時間ベースのトリガーのタイプを選択分ベースのタイマー
時間の間隔を選択(時間)1分おき

「実行する関数」はそのままなんですが、前項のサンプルコードの場合だと「checkMail」です。

まとめ

最後にまとめておきます。

Gmailを受信したらLINEに通知する方法ですが、流れは以下の通りです。

  • ① LINE Notifyで通知するためのトークンを取得する
  • ② GASで通知用のコードを書く
  • ③ GASで通知するタイミング(間隔)を指定する

①と③については、以下の記事を参考にしてください。

LINEで自動的にメッセージを定期送信する方法【LINE Notify, Google Apps Script】

②の部分が、本記事で紹介しているところです。

最初に記載したコードをまるまる貼り付けて、LINEトークンだけ入力すれば動作しますが、メールの取得間隔や表示内容など調整したい場合は、前項の内容を参考にしてください。

以上、GASを使ってGmailを受信したらLINEに通知する方法でした。