Gmailに届いた重要なメール、見逃さずにすぐに気づきたいと思ったことはありませんか? 今回は、Google Apps Script (GAS) を使って、Gmailに届いた特定のメールをLINEにリッチな形式で自動通知する方法を紹介します。
例えば、証券会社からの取引通知メールを、以下のようにLINEで受け取ることができます。

通知対象のメール例
このメールが届くと、LINEにはこのようにボタン付きのメッセージが届きます。

LINEへの通知(ボタン付き)

メール詳細の表示
この記事を読めば、あなたもこのような便利な通知システムを構築できます。それでは、具体的な手順を解説していきます。


システムの全体像
今回作成するシステムの処理の流れは以下の通りです。
- GASが定期的(例: 5分ごと)に起動
- 指定した検索条件でGmailを検索
- 新しいメールが見つかれば、内容を取得
- LINE Messaging APIを使い、リッチなメッセージをLINEに送信
- 処理済みのメールにはスターを付けて、二重通知を防止
- LINEの「詳細はこちら」ボタンをタップすると、GASで作成したWebページでメール本文を表示
STEP1: GASのコードを準備する
まず、GASプロジェクトに2つのファイルを作成します。
コード.gs: メインの処理を記述するスクリプトファイルindex.html: メール本文を表示するためのHTMLファイル
コード.gs の実装
Gmailを検索し、LINEに通知を送るためのメインロジックです。
1. Gmailを検索してLINEに通知する
// 【要設定】LINEで取得したトークン
const token = "LINEのアクセストークン";
// 【要設定】LINEで送信する宛先のユーザーID
const To = "LINEのユーザーID";
// 【要設定】GASの公開URL
const appURL = "GASのウェブアプリURL";
function checkGmailAndNotifyToLINE() {
// 【要設定】Gmailの検索条件を指定
const searchGmail = "from:example@co.jp subject:取引通知";
// スターが付いていないメールを1スレッドのみ検索
const threads = GmailApp.search(searchGmail + " -is:starred", 0, 1);
if (threads.length === 0) {
console.log("新着メールはありませんでした。");
return;
}
const messages = GmailApp.getMessagesForThreads(threads);
// 検索されたメッセージを1件ずつ処理
for (let thd in messages) {
for (let mail in messages[thd]) {
let mailID = messages[thd][mail].getId(); // メールID
let mailFrom = /"(.*?)"/.exec(messages[thd][mail].getFrom())[1] || messages[thd][mail].getFrom(); // 差出人
let mailSubject = messages[thd][mail].getSubject(); // 件名
// メール本文をキャッシュに保存(有効期限6時間)
let cache = CacheService.getScriptCache();
cache.put("mailBody" + mailID, messages[thd][mail].getBody(), 21600);
// LINEにプッシュメッセージを送信
pushMessage(mailID, mailFrom, mailSubject);
// 処理済みのメールにスターを付ける
messages[thd][mail].star();
}
}
}
ポイント解説
searchGmail: ここにGmailで使いたい検索クエリ(差出人、件名など)を指定します。is:starred: 処理済みのメールにスターを付けることで、同じメールを何度も通知しないように制御しています。CacheService: メール本文を一時的にキャッシュに保存しています。これにより、LINEのボタンから本文を高速に表示できます。
2. LINEにプッシュメッセージを送信する
function pushMessage(id, from, subject) {
const url = "https://api.line.me/v2/bot/message/push";
const headers = {
"Content-Type": "application/json",
Authorization: "Bearer " + token,
};
const payload = {
to: To,
messages: [
{
type: "template",
altText: from.substr(0, 29) + "からメールがありました",
template: {
type: "buttons",
title: from.substr(0, 29) + "からメールがありました",
text: subject.substr(0, 60),
actions: [
{
type: "uri",
label: "メールの詳細はこちら",
uri: appURL + "?mailID=" + id,
altUri: {
desktop: appURL + "?mailID=" + id,
},
},
],
},
},
],
};
const options = {
method: "post",
headers: headers,
payload: JSON.stringify(payload),
};
UrlFetchApp.fetch(url, options);
}
ポイント解説
buttonsテンプレート: LINEにボタン付きのメッセージを送るための形式です。uriアクション: ボタンをタップした際に、指定したURLを開かせます。ここでは、メールIDをパラメータとして渡しています。
3. メール本文を表示するWebアプリ
LINEのボタンからアクセスされた際に、メール本文を表示するためのコードです。
function doGet(e) {
// URLパラメータからメールIDを取得
const ID = e.parameter.mailID;
if (!ID) {
return HtmlService.createHtmlOutput("メールIDが指定されていません。");
}
// メールIDに対応する本文をキャッシュから取得
const cache = CacheService.getScriptCache();
const mailBody = cache.get("mailBody" + ID);
if (!mailBody) {
return HtmlService.createHtmlOutput("メールの本文が見つからないか、有効期限が切れました。");
}
// テンプレートHTMLに本文を埋め込んで返す
const template = HtmlService.createTemplateFromFile("index");
template.mailBody = mailBody;
return template.evaluate().addMetaTag(
"viewport",
"width=device-width, initial-scale=1.0"
);
}
index.html の実装
doGet関数から呼び出されるHTMLファイルです。
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<?!= mailBody ?>
</body>
</html>
<?!= mailBody ?>の部分に、doGet関数から渡されたメール本文が展開されます。
STEP2: LINEの設定
LINE側の設定を行い、アクセストークンとユーザーIDを取得します。詳しい手順は以下の記事を参考にしてください。
- アクセストークン取得:
- ユーザーID取得:
取得した値は、コード.gsの先頭にあるtokenとToの変数に設定してください。
STEP3: GASのデプロイとトリガー設定
最後に、作成したGASをWebアプリとして公開し、定期的に実行するためのトリガーを設定します。
Webアプリとしてデプロイ
- GASエディタ画面右上の「デプロイ」>「新しいデプロイ」を選択。
- 「種類の選択」で歯車アイコンをクリックし、「ウェブアプリ」を選択。
- 「アクセスできるユーザー」を「全員」に設定して「デプロイ」。
- 表示されたウェブアプリURLをコピーし、
コード.gsのappURL変数に設定します。
トリガーの設定
- GASエディタ左側のメニューから時計アイコンの「トリガー」を選択。
- 右下の「トリガーを追加」をクリック。
- 以下の通り設定します。
- 実行する関数を選択:
checkGmailAndNotifyToLINE - イベントのソースを選択:
時間主導型 - 時間ベースのトリガーのタイプを選択:
分ベースのタイマー - 時間の間隔を選択:
5分おき(お好みで調整してください)
- 実行する関数を選択:
- 「保存」をクリックします。

トリガー設定の例
これで全ての設定は完了です!指定した条件のメールがGmailに届くと、設定した時間間隔でLINEに通知が届くようになります。
まとめ
今回は、GASを使ってGmailとLINEを連携させ、特定のメールをリッチな形式で通知する方法を解説しました。
この仕組みのポイントは以下の通りです。
- GmailAppで柔軟なメール検索が可能
- 処理済みメールのスター付けによる二重通知防止
- CacheServiceを活用した高速なメール本文表示
- LINEのButtons Templateによるリッチな通知
この仕組みを応用すれば、様々なサービスからの通知をLINEに集約するなど、日々の業務や生活をさらに効率化できます。ぜひ試してみてください。

