3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GAS・LINEmessagingAPIを使ってGmailをLINEに転送する

Last updated at Posted at 2025-02-04

LINE Notifyが3/31に終了するらしい
https://notify-bot.line.me/closing-announce

今まで、Google Apps Scriptを使って、特定のGmailの内容をLINE Notifyに転送していた
転送設定が便利だったため、なくなると非常に困る

ただ、それらの代案としてLINE Messaging API を使用することができるらしい
https://developers.line.biz/ja/services/messaging-api/

【追記】LINE公式アカウントの無料版のメッセージ通数は200通/月のため、上限には注意が必要。
詳細はコメント参照。
( ありがたいことにコメントでご指摘いただきました :bow::bow:

今回、Messaging APIとGoogle Apps Scriptを使用して、「特定のGMailの通知を、LINEに転送する」機能の実装を行なったため、備忘録として残しておくとする
初学者な上に、ChatGPTに頼ったところもあるのでやや不安もある…
間違っていることがあればぜひコメントとしていただきたい

▼公式LINEの設定
1.公式LINE(チャネル)を作成する
https://entry.line.biz/start/jp/
2.設定にあるMessaging APIから[Messaging APIを利用する]を選択する
Messaging API.png

3.[LINE Developer]へアクセスして、コンソールを選択する
https://developers.line.biz/ja/
4.プロバイダーを作成する
 ※名前は後からでも変更できる
5.作成したプロバイダーでチャネル設定を行なう
6.作成したチャネルを選んで、Messaging API 設定を選択する
7.チャンネルアクセストークンを発行して、トークンをコピーする

▼Gmail特定のメールにラベルを設定
フィルタを作成して、ラベルを付与する自動振り分け設定を行なう
https://support.google.com/mail/answer/6579?hl=ja

▼GASの設定:プロジェクトの作成
https://script.google.com/home?hl=ja
1.新しいプロジェクトを作成する
2.プロジェクト名を設定する
3.下記のコードを記述する
 3行目の(Messaging APIのトークン)を上記で取得したトークンの値へ書き換える

/* ------------------------------------------------------- */
// LINE BOT のチャネルアクセストークン
// これを使用して LINE の API にアクセスします
var LINEBOT_CHANNEL_TOKEN = '(Messaging APIのトークン)'; 

// 検索条件: 未読 & ラベル「LINE」が付いたメールを取得
var GMAIL_QUERY = "is:unread label:LINE";
/* ------------------------------------------------------- */

/**
 * メッセージを LINE BOT に送信する関数
 * @param {string} message 送信するテキストメッセージ
 */
function pushMessageLineBot(message) {
    var options = {
        method: "post",
        headers: {
            "Content-Type": "application/json",
            Authorization: "Bearer " + LINEBOT_CHANNEL_TOKEN,
        },
        payload: JSON.stringify({
            messages: [{ type: "text", text: message }]
        })
    };
    
    // LINEのAPIにリクエストを送信
    UrlFetchApp.fetch("https://api.line.me/v2/bot/message/broadcast", options);
}

/**
 * Gmail から未読のメッセージを取得し、フォーマットしてリストにまとめる関数
 * 取得したメッセージは既読にする
 * @return {string[]} 取得したメールのリスト(フォーマット済み)
 */
function getMessageGmail() {
    var threads = GmailApp.search(GMAIL_QUERY); // 指定の条件に一致するスレッドを取得
    var messages = GmailApp.getMessagesForThreads(threads); // 各スレッド内のメッセージを取得
    var items = [];

    messages.forEach(thread => {
        var latestMessage = thread.pop(); // 各スレッドの最新メッセージを取得
        var date = latestMessage.getDate();
        var formattedDate = `[日時]\n${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()} ${date.getHours()}:${date.getMinutes()}`;

        // メッセージを読みやすい形式にフォーマット
        items.push(
            `${formattedDate}\n\n[件名]\n${latestMessage.getSubject()}\n\n[本文]\n${latestMessage.getPlainBody()}`
        );

        latestMessage.markRead(); // メールを既読にする
    });

    return items;
}

/**
 * メイン関数
 * Gmail から未読メールを取得し、それを LINE BOT で送信する
 */
function main() {
    var items = getMessageGmail();
    items.forEach(item => pushMessageLineBot(item));
}

4.実行する関数を選択:main にする
5.保存
6.実行テスト
 ラベルが付与されたメールを受信すると、作成した公式LINEから通知が送付される

▼GASの設定:トリガーの設定
image.png

完了
ここ数日動かしてはいるが、問題なく動いているため、おそらくこれで問題ない作りになっているはず…

3
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?