GmailをLineに転送してみた。

プログラミング

公共料金や家族で共有しているサブスクからのメールは、基本的個人のGmailに設定しています。

しかし、自分がメールをみんなに共有するのを忘れたり、
ワンタイムパスワード系のメールだと時間の制約もあったりと中々面倒。。。

そこで、
Gmailを受信したら、Lineに飛ばす仕組みを作ってみました。
真面目な面倒くさがりは、こういうことはするみたいです。

技術要素

技術的な要素は2点です。
・Line Message API
・Google Apps Scripts

Line Message APIは、Lineの公式アカウントにメッセージを送信したり、
アカウントに受信したメッセージをトリガーに機能を実行したりするAPIです。

ちょっと前に流行っていたLine Notiferは、2025年3月にサービスを終了するので、使用は控えたほうがいいと思います。

Google Apps Scriptsは、スプレッドシートやGmailなどのGoogleが提供しているサービスをコードで操作できるプラットフォームです。JavaScriptが書けるならあとはドキュメントを見ながら作製できるかなと思います。

Line Message API

Line Message APIを使うまでの流れを紹介します。

1.LINE Developersへ登録

普通のLineのアカウントがあれば、すぐに登録できます。

2.プロバイダーとチャネルを作成

プロバイダー作成画面からプロバイダーを作成したら、Messaging APIのチャネルを作成します。

作成時にAPIを使う公式アカウントを選択します。

3.作成したチャネルのチャネルアクセストークン(長期)を取得

Messaging APIの設定画面から、「チャネルアクセストークン(長期)」 を取得します。

これを使って、メッセージを送ったりします!

GAS側のプログラムを作成

プログラムはこんな感じ。

  // Line Message Api用 URL
  const LINEMSGURL = "https://api.line.me/v2/bot/message/broadcast"
  
  // Line Message Api用 トークン
  const CHANELTOKEN = "トークン"



/**
* 1分置きにこのメイン関数を実行する
*
**/
function main() {
  // メールの確認を実施
  var msg = getNfMailMessage()
  // 結果が空なら終了
  if(msg == undefined) return

  sendMessage(msg)
}



/**
 * Gmailのメールを確認する
 * 
 */
function getNfMailMessage() {
  // Gmailのタイトルを検索して、取得する
  // subject メールタイトル is:unread 未読のもの
  var threads = GmailApp.search('subject:"メールタイトル" is:unread', 0, 1);
  // 対象のメールがなければ、終了
  if (threads.length == 0) return undefined

  // メールを既読にする
  threads[0].markRead()

  // メールから本文を取得
  var msgObj = threads[0].getMessages()[0]
  var msgPlan = msgObj.getPlainBody()

  /////// 本文から欲しい内容を取得(いろいろ手段はあるから頑張って)///////

  // URLがなければ、終了
  if (res == undefined) return undefined 

  return res 
}


/**
 * Line Apiでメッセージを送信
 * 
 */
function sendMessage(msg) {
  // 送信メッセージ
  const payLoad = {
    "messages" : [ 
      { 
        "type" : "text",
        "text" : msg
      }
    ]
  }
  
  // ヘッダ
  const header = {
      "Content-Type": "application/json",
      "Authorization": "Bearer " + CHANELTOKEN
  }

  // オプション
  const options = {
    "method" : "post",
    "headers" : header,
    "payload" : JSON.stringify(payLoad) 
  }

  // 送信実施
  UrlFetchApp.fetch(LINEMSGURL, options)
}

GASのトリガー設定で1分置きにプログラムのメイン関数を実行すれば、ほぼリアルタイムでメールをLineに転送できます!

おわりに

このプログラムを数週間ほど実行しているのですが、問題なくLineに転送されるので結構楽でいいですよ。

LineAPIといい、GASといい無料で使えるものが多い現代は、いろいろと遊べてエンジニアの知見が広がっていいですね。

よかったらやってみてください!

コメント