GAS Gmailの内容をLINEへ通知する方法。自動化をして作業の効率を高めよう!

プログラミング

LINEへ通知を送るために必要な準備

LINEへ通知を送る前提をして、下記の2つの準備が必要です。

  1. Line Notifyへの登録
  2. トークンの発行

詳しい、設定方法は下記記事で解説を行っているので、参考にしてみてください。

Google App Scriptのドキュメントは下記リンクをチェック

Apps Script – Google Apps Script
Apps Script  |  Google for Developers
Develop high-quality, cloud-based solutions with ease.

通知を送るコード

//LINEにメッセージを送信する
function sendLineMessage() {
	const LINE_NOTIFY_TOKEN = "トークン" 
  var response = UrlFetchApp.fetch("<https://notify-api.line.me/api/notify>", {
    "method": "post",
    "headers": {
      "Authorization": "Bearer " + LINE_NOTIFY_TOKEN
    },
    "payload": {
      "message": "通知するメッセージを記載" // 引数で動的に変更する
    }
  });
}

上記を実行すると、トークンを発行した際に設定したトークにLineが送信されます。

LINEへメッセージを来る方法については、これでOKです。

メッセージを動的に変えたいときは、引数を使ってメッセージの内容を変更できます!

GASでGmailからメールの内容を取得し、LINEへ送信

流れとしては、

  1. 検索条件を決める
  2. 検索条件に必要な情報を準備
  3. スレッドで検索を行う
  4. 条件にヒットしたメールの本文を取得
  5. LINEへ送信

① 検索条件を決める

今回の条件は、「件名が一致かつ実行した月」の範囲で検索を行います。

例:

  • 実行日 2022/01/08
  • 件名:テスト
  • 検索期間 2022/01/01〜2022/01/31

の条件に該当するメールの内容を取得します。

② 検索条件に必要な情報を準備

var now = new Date();
var monthStartDate = new Date(now.getFullYear(), now.getMonth(), 1); //月初の取得
var monthEndDate = new Date(now.getFullYear(), now.getMonth() + 1, -1); //月末の取得
//時間のフォーマットを行う
var firstDay = Utilities.formatDate(monthStartDate, 'Asia/Tokyo', 'yyyy/MM/dd')
var endDay = Utilities.formatDate(monthEndDate, 'Asia/Tokyo', 'yyyy/MM/dd')

//検索の条件を変数へ格納
var query = "subject:件名 after:" + firstDay + "before:" + endDay + "";

検索条件種類

// 件名
var query = "subject:件名";
// ラベル
var query = "label:ラベル";
// 日付
var query = "after:2022/1/1 before:2022/1/31";
// 送信者
var query = "<from:test@gmail.com>";

複数条件で検索したい場合は、下記のように続けて書いて上げるだけで条件を追加することができます。

// 例:件名+日付
var query = "subject:件名 after:2022/1/1 before:2022/1/31"

③ 検索を行う

var myThreads = GmailApp.search(query);

先程準備したqueryを使用して検索を行うだけです!

④条件にヒットしたメールの本文を取得

条件にヒットした、メールから本文だけを抽出したい場合

GmailApp.getMessagesForThreads()を使用します

//指定した条件でスレッドを検索して取得 
var myThreads = GmailApp.search(query);
// 本文を取得
var messages = GmailApp.getMessagesForThreads(myThreads);

⑤LINEへ送信

冒頭で解説した、LINEへメッセージを送信する関数を使用して、メッセージを送信します。

sendLineMessage(messages)

通知は完了です!

お疲れさまでした!

全体のコード

var LINE_NOTIFY_TOKEN = "LINE トークン";
var date = new Date();
var now = new Date();
var monthStartDate = new Date(now.getFullYear(), now.getMonth(), 1);
var monthEndDate = new Date(now.getFullYear(), now.getMonth() + 1, -1);
var firstDay = Utilities.formatDate(monthStartDate, 'Asia/Tokyo', 'yyyy/MM/dd')
var endDay = Utilities.formatDate(monthEndDate, 'Asia/Tokyo', 'yyyy/MM/dd')

var query = "subject:件名 after:" + firstDay + "before:" + endDay + "";

//メールをチェックし条件に該当するメールをLINEに通知する
function getMail() {

  //指定した条件でスレッドを検索して取得 
  var myThreads = GmailApp.search(query);
  var messages = GmailApp.getMessagesForThreads(myThreads);
  sendLineMessage(messages)
}

//LINEにメッセージを送信する
function sendLineMessage(msg) {
  var response = UrlFetchApp.fetch("<https://notify-api.line.me/api/notify>", {
    "method": "post",
    "headers": {
      "Authorization": "Bearer " + LINE_NOTIFY_TOKEN
    },
    "payload": {
      "message": msg
    }
  });
}

まとめ

  1. LINE Notify からトークンを取得
  2. Gmailから必要なメールの情報を抽出
  3. 抽出した内容をメールへ送信

といった流れで実装を行いました。

1つずつ分解して考えていけば難しいことはしていないので、

一気に実施するのではなく、パーツを作ってあとから組み立てるといった流れで

実装するのがおすすめです!

公式のドキュメントは下記

LINE Notify
LINE Notify allows you to send web notifications from GitHub, IFTTT, Mackerel, and more directly to your LINE chats.

GAS 初心者オススメ参考書

プログラミング
スポンサーリンク
スポンサーリンク
e-logsをフォローする
スポンサーリンク
eLogs

コメント

タイトルとURLをコピーしました