📧

GmailをTypeScriptとLINE Messaging APIを用いてLINEに自動転送してみた

に公開

こんにちは、つくぼし(tsukuboshi0755)です!

皆さん、Gmailの特定のメールをLINEに自動転送したいと思った事はありますでしょうか。

今回はGmailをLINE Messaging APIを用いてLINEに転送するGASアプリを、TypeScriptを用いて作ってみたので、本記事で紹介したいと思います!

https://github.com/tsukuboshi/gas-gmail-to-line

前提条件

今回はGAS開発にasideというツールを使用し、TypeScriptを用いて開発を行っています。

TypeScriptで開発する事で、型安全性を保ちながらバックエンド開発を進める事ができるためオススメです。

https://github.com/google/aside

また今回はLINEへの通知用APIとして、LINE Messaging API(LINE公式アカウント)を使用します。

以前はLINE Notifyも使用可能でしたが2025/3/31にサービス終了するため、今後はLINE Messaging APIを使用する必要があります。

https://developers.line.biz/ja/news/2024/10/07/line-notify-will-be-discontinued/

なおLINE Messaging APIの無料プランは無料メッセージ通数が月200通までとなっているため、通知メール数が多くなってきた場合には注意してください。

https://www.lycbiz.com/jp/service/line-official-account/plan/

アプリケーション仕様

今回のGASアプリは、src/index.ts及びsrc/example-module.tsの2つのファイルからなります。

src/env.tsは、Google Spreadsheetで設定可能な以下のパラメータのデフォルト値を事前に定義しています。

基本いじらなくても問題はないですが、もし他の値に変えたい場合は適宜変更すると良いです。

変数名 説明 デフォルト値
numberOfTokens LINE Messaging APIで使用するLINEチャネル(トークン)の個数 4
numberOfLabels 1つのLINEチャネルに対して転送したいGmailラベルの個数 6
bodyMaxLength LINEチャネルに転送するメール本文の最大文字数 500

https://github.com/tsukuboshi/gas-gmail-to-line/blob/main/src/env.ts

src/index.tsは、GASアプリのメイン処理を記述したファイルで、以下の内容を含みます。

  • OnOpen関数: スプレッドシートを開いた際に実行される関数
    • AddCustomMenu関数: スプレッドシートに「通知テストの実施」と「通知トリガーを1時間で設定」のカスタムメニューを追加します
    • WritePropertyToSheet1関数: 「プロパティ」シートでLINEトークンやGmailラベル名などの設定を管理します
  • main関数: メール取得、整形、LINE送信といったメイン処理を実行する関数
    • fetchHomeMail関数: 指定されたGmailラベルの未読メールを取得し、LINE送信用の配列を生成します
    • gmailToString関数: 取得したGmailのメールを、送信者、件名、本文(最大文字数内)を含む文字列に整形します
    • sendLine関数: 整形されたメールの内容をLINE Messaging API経由で送信します
  • setupOrUpdateTrigger関数: main関数を1時間ごとに自動実行するトリガーを設定/更新する関数

https://github.com/tsukuboshi/gas-gmail-to-line/blob/main/src/index.ts

デプロイ手順

デプロイ手順については、リポジトリのREADMEに記載しているため以下を参考にしてください。

https://github.com/tsukuboshi/gas-gmail-to-line/blob/main/README.md

使い方

GASアプリのデプロイ後、以下の手順を実施する必要があります。

LINEチャネルの作成

LINE Messaging APIを利用する場合、事前にChannel Access Tokenを取得する必要があります。

以下の「手順」を参考に、LINE Messaging APIの長期のチャネルアクセストークンを取得し、メモしておきます。

https://zenn.dev/kou_pg_0131/articles/line-push-text-message

Gmailラベル及びフィルタの作成

Gmailの特定のメールをLINEに転送するためには、事前にGmailのラベル及びフィルタを作成する必要があります。

以下の「フィルタによる自動仕分けをする」を参考に、転送したいメールを条件検索するためのラベル及びフィルタを作成し、新規作成したラベル名をメモしておきます。

https://zenn.dev/kzautomation/articles/7c0c3a4d1758c5#フィルタによる自動仕分けをする

以下のようなフィルタ設定を作成できればOKで、この中の「ラベルを付ける」で指定したラベル名を後で使用します。

スプレッドシートでのパラメータ設定

以下のいずれかを実施する事で、GASプロジェクトに紐づいているSpreadSheetを開きます。

  • ブラウザ:GASプロジェクトホームより、GASプロジェクトに紐づいているスプレッドシートを開きます
  • ターミナル:npx clasp open --addonコマンドで開きます

SpreadSheetの「プロパティ」シートを開いたら、以下のA列に対してLINE Messaging APIの長期のチャネルアクセストークン、(デフォルトでは)B-F列に対してGmailのラベル名を入力します。

カスタムメニューによるGAS設定

SpreadSheetの上部にカスタムメニューが追加されているので、動作確認及び自動実行の設定を行います。

まず「通知テストの実施」をクリックすると、GASのmain関数が実行されるので、指定したラベル名のメールが特定のLINEチャネルに正しく通知されるかテストすると良いです。

正常に通知された場合は、作成したLINE公式アカウントに以下の通りメールの件名と内容が通知されます。

動作確認後に「通知トリガーを1時間で設定」をクリックすると、GASのmain関数の実施トリガーが1時間毎に設定され、今後自動で1時間毎に通知が行われるようになります。

まとめ

今回はGmailをLINEに転送するGASアプリを作成してみました。

GASアプリはasideを用いる事でTypeScriptによる開発を可能とし、自動化の第一歩として非常にオススメです。

またLINE Messaging APIを用いる事で、LINEに通知を送る事ができるため、通知アプリとしても活用できます。

他にも様々な使い方が考えられるため、是非自分の用途に合わせてカスタマイズしてみてください!

以上、つくぼし(tsukuboshi0755)でした!

Discussion