Gmail宛の特定のメールをLINEに転送する方法
Gmail宛の特定のメールをLINEに転送する方法を紹介します。
1.はじめに
Googleアカウントを取得して、Gmailを利用できる状態であること
LINEビジネスアカウントを取得しておくこと
この情報は2026年2月鵜現在のものです。
2.LINE Developersのアカウント作成
LINE Messaging APIを利用するために、LINE Developersのアカウントを作成します。
ただ、手順の途中でLINE公式アカウントを作るよう促されるので、正しい順序ではないかもしれません。予めご了承ください。
https://developers.line.biz/ja/
にアクセスして、「コンソールにログイン」をクリック。

「アカウントを作成」をクリック。

LINEアカウントまたはメールアドレスで登録します。

ここでは音楽コミュニティで使っているメールアドレスで登録しました。

任意の名前とパスワードで登録します。

登録が完了すれば、INE Developersのコンソールにログインできますので、開発者名とメールアドレスを登録します。
ページ下の「新規プロバイダー作成」をクリック。
(ここまでの画面遷移が曖昧ですが)次のような画面になったら「Messaging API」をクリック。
3.LINE公式アカウント作成
ここで下記の画面になり、Messaging APIをこの画面で作る前にLINE公式アカウント作成し、「Line Official Account Manager」でMessaging APIの利用を有効にするよう求められます。
「LINE公式アカウントを作成する」をクリック。
作成完了すると次のような画面になります。
また、ダイアログで友だち追加するよう求められるので、表示されたQRコードを使って、スマホのLINEに公式アカウントを友だち追加しておきます。この友だち追加したLINEアカウントはあとの作業で必要になります。
公式アカウントを作成すると(多分)自動的に「Line Official Account Manager」のコンソールになるので、「Messaging API」をクリック。
「Messaging APIを利用する」をクリック。
プロバイダを選択します(候補が表示されていた気がするのでそれを選択)。
プライバシーポリシーと利用規約は任意なので何も入力せず「OK」をクリック。
確認を求められるので「OK」をクリック。
設定が完了すると次の画面が表示されます。この画面は次の作業で使うのでそのままにしてください。
4.グループID取得
作成したLINE公式アカウントの「グループID」を取得します。
グループIDはGAS(Google Apps Script)で作成する、LINEに転送するスクリプトに必要な情報です。
で、ここから話がややこしくなるのですが、LINE公式アカウントの「グループID」を取得するには、次の作業が必要です。
①任意のLINEグループを作る
②①のLINEグループに、作成した公式アカウントを追加する
③①のLINEグループに、作成した公式アカウント以外のユーザー(①のLNEグループを作成したユーザーなど)からメッセージ(トークデータ)を送る
この③の動作で、公式アカウントにメッセージが届くのですが、そのメッセージの中に「グループID」が含まれます。
グループIDはLINE公式アカウントのコンソール画面では取得できず、メッセージだけに含まれるようで、そのため一時的にこの作業が必要となります。
ただ、LINEのトーク画面ではその情報は見ることはできないので、Webhookという仕組みを使って、グループIDを含むメッセージを取得します。
そのために、Webhook用のURLをLINE公式アカウントに登録し、③の動作でグループIDを含む各種情報を取得します。
情報を取得する手順ですが、まず、
にアクセスして、赤枠のURLをコピーします。
コピーしたURLを、LINE公式アカウントの「Messaging API」の項目に「Webhook URL」に設定、保存します。
これでこのLINE公式アカウントへのメッセージをWebhookで取得できる状態になりました。このwebhook.siteの画面に情報が表示されるので、このままにしておいてください。
LINE公式アカウントの「Messaging API」の画面を間違って変えてしまった場合、ここに戻ってくる方法ですが、LINE公式アカウント右側の「設定」をクリックすれば、左メニューに「Messaging API」が表示されるので、そのリンクをクリックします。

また、LINE Developersにも同じような画面があるので、どちらに設定しても、もう片方に反映されるようです。なお、こちらの画面には「Webhookの利用」というスイッチがあるので、とりあえずオンにしておきました。
これでグループIDを取得する準備ができたので、③の投稿を行うと、webhook.siteの画面にJSONが表示されるので、その中にある「groupId」の値をコピーしてください。データ取得後、先ほどの「Webhookの利用」はオフにしてOKです。
5.チャネルアクセストークン取得
チャネルアクセストークンを取得します。
チャネルアクセストークンIDもグループID同様、GAS(Google Apps Script)で作成するLINEに転送するスクリプトに必要な情報です。
チャネルアクセストークンは、LINE DevelopersのMessaging API画面の下の方にある「発行」ボタンをクリックすれば表示されるので、それをコピーします(画像は発行後のもの)。
5.GASにスクリプト作成
GAS(Google Apps Script)にLINEに転送するスクリプトを作成します。先ほど取得したグループIDと、「チャネルアクセストークン」が必要になります。
Gmailと同じアカウントで、
にアクセスして、「新しいプロジェクト」をクリック。

コードを記述する部分にサンプルが表示されるので、それをすべて削除して下記の内容を貼りつけます。
このスクリプトはAIとやり取りしながら、下記の条件になるようにしています。
- To:xxx@xxx宛のメール(=Gmailへの転送メール)だけを対象
- 未読のみが対象
- 迷惑フォルダも検索する
- 1通ずつ送信するとMessagindg APIの月200通の上限にひっかかるので、複数のメールをまとめて転送
- 送信成功したら既読マークをつける(Gmailと同じアカウントのGASで作らないとマークされません)
const LINE_TOKEN = 'チャネルアクセストークン';
const LINE_GROUP_ID = 'グループID';
const TO_ADDR = 'GMailに送信されたTo:のアドレス';
const MAX_THREADS_PER_RUN = 20;
const MAX_BODY_CHARS = 150;
const DONE_LABEL = 'LINE_DONE';
const LINE_MAX_CHARS = 4500;
function checkGmailAndSendToLine() {
const doneLabel =
GmailApp.getUserLabelByName(DONE_LABEL) || GmailApp.createLabel(DONE_LABEL);
// 未読だけ+処理済みラベルは除外(迷惑メールも含む)
const query = `in:anywhere to:${TO_ADDR} is:unread -label:${DONE_LABEL}`;
const threads = GmailApp.search(query, 0, MAX_THREADS_PER_RUN);
Logger.log(`query=${query}`);
Logger.log(`threads=${threads.length}`);
if (threads.length === 0) return;
const blocks = [];
threads.forEach((thread, i) => {
const msg = thread.getMessages().pop();
const from = msg.getFrom();
const subject = msg.getSubject();
let body = (msg.getPlainBody() || '').replace(/\r\n/g, '\n').trim();
if (body.length > MAX_BODY_CHARS) {
body = body.substring(0, MAX_BODY_CHARS) + '...';
}
blocks.push(`■ ${i + 1}\n送信元: ${from}\n件名: ${subject}\n${body}`);
});
let finalMessage =
`未読 ${threads.length}件\n\n` +
blocks.join('\n\n----------------\n\n');
// LINE文字数ガード(失敗を避ける)
if (finalMessage.length > LINE_MAX_CHARS) {
finalMessage = finalMessage.substring(0, LINE_MAX_CHARS) + '\n\n(以下省略)';
}
const ok = sendToLine(finalMessage);
if (ok) {
// 成功した時だけ:処理済みラベル付与+既読化
threads.forEach(t => {
t.addLabel(doneLabel);
t.markRead();
});
Logger.log(`marked read + labeled: ${threads.length}`);
} else {
Logger.log('LINE送信失敗: 既読にしません(次回再送できるように)');
}
}
function sendToLine(message) {
const url = 'https://api.line.me/v2/bot/message/push';
const payload = {
to: LINE_GROUP_ID,
messages: [{ type: 'text', text: message }]
};
const options = {
method: 'post',
contentType: 'application/json',
headers: { Authorization: 'Bearer ' + LINE_TOKEN },
payload: JSON.stringify(payload),
muteHttpExceptions: true,
};
const res = UrlFetchApp.fetch(url, options);
const code = res.getResponseCode();
const text = res.getContentText();
Logger.log(`LINE code=${code}`);
Logger.log(`LINE body=${text}`);
return code === 200;
}
ペーストしたら「保存」アイコンをクリック。

このあと、このスクリプトが周期的に動作するよう「トリガ」を設定するのですが、その前に、このスクリプトが正常に動作することを確認するため「実行」をクリック。

実行結果が画面の下に表示されるので、それを確認するとともに、LINEグループに転送されていることを確認します。

6.スクリプトにトリガ設定
作成したスクリプトの左側にある時計のアイコンをポイントすると「トリガー」が表示されるのでクリック。

右下の「トリガーを追加」をクリック。

それぞれ下記の通り設定します。
- 起動する関数:上のコード利用であれば「checkGmailAndSendToLine」を選択
- 実行するデプロイを選択:Headのまま
- イベントのソースを選択:時間主導型
- 時間ベースのトリガーのタイプを選択:分ベースのタイマー
- 時間の間隔を選択(分):10分など、デバグ中は1分でもOK
これでトリガーの周期にLINEグループにメールの内容が転送されてくればOKです。
- Gmailでメール送信を取り消す方法
- Gmailの返信や転送でタイトルを変更する方法
- Gmailのヘッダを非表示にするブックマークレット
