Gmailの返信漏れを防ぐ。
未返信メールを毎朝リマインド(GAS)。
「あとで返そう」と思ったメールが、他のメールに埋もれて数日たっていた——小さな事業ほど、それがそのまま失注やクレームになります。このページでは Google Apps Script(GAS)で、相手から届いたまま返信していないスレッドだけを毎朝一覧にして、自分宛てに通知する仕組みを作ります。
1. できること
| 項目 | このページのコード |
|---|---|
| 「未返信」の判定 | スレッドの最後のメールが自分以外から届いていて、そこから24時間以上たっているもの |
| 対象外にするもの | 自分・エイリアス(別名アドレス)が最後に送ったスレッド、noreply・通知・メルマガ、プロモーション/SNS/新着タブ、「返信不要」ラベルを付けたスレッド |
| 通知 | 毎朝1通、自分宛てに「未返信◯件」のメール。古い順に、経過時間・送信元・件名(Gmailで開くリンク) |
| ラベル | 未返信のスレッドに「要返信」ラベルを自動で付け、返信したら次回の実行で自動で外す |
送るのは自分宛ての通知だけです。相手に自動でメールを送ることはありません。
2. 準備
- script.google.com で「新しいプロジェクト」を作ります(スプレッドシートは不要です)。
- 下のコードを貼り付けます。まずはそのままで大丈夫です。
- ▶ で
remindUnrepliedを一度実行し、Gmailの許可を与えます。未返信があれば自分宛てに通知が届きます。 - 左の時計アイコン「トリガー」→「トリガーを追加」→ 関数
remindUnreplied・「時間主導型」・「日付ベースのタイマー」・「午前8〜9時」などで保存します。 - 返信する必要のないメール(お礼への返事など)には、Gmailで「返信不要」ラベルを付けておくと、以後は通知されません。
3. コード全文(コピペで動きます)
const QUERY = 'in:inbox -category:promotions -category:social -category:updates newer_than:14d';
const WAIT_HOURS = 24; // 最後のメールからこの時間たっても返信がなければ対象
const SKIP_FROM = /no-?reply|mailer-daemon|notification|magazine|newsletter/i;
const SKIP_LABEL = '返信不要'; // このラベルを付けたスレッドは対象外
const MARK_LABEL = '要返信'; // 未返信のスレッドに自動で付けるラベル(空文字なら付けない)
function remindUnreplied() {
const me = [Session.getActiveUser().getEmail()].concat(GmailApp.getAliases())
.map(s => s.toLowerCase());
const now = Date.now();
const mark = MARK_LABEL ? (GmailApp.getUserLabelByName(MARK_LABEL) || GmailApp.createLabel(MARK_LABEL)) : null;
const pending = [];
for (const th of GmailApp.search(QUERY + ' -label:' + SKIP_LABEL, 0, 200)) {
const msgs = th.getMessages();
const last = msgs[msgs.length - 1];
const from = addr_(last.getFrom());
const hours = (now - last.getDate().getTime()) / 3600000;
const mine = me.includes(from);
if (mine || SKIP_FROM.test(from) || hours < WAIT_HOURS) {
if (mine && mark) th.removeLabel(mark); // 返信済みになったらラベルを外す
continue;
}
if (mark) th.addLabel(mark);
pending.push({ hours, from, subject: last.getSubject() || '(件名なし)', id: th.getId() });
}
if (!pending.length) return;
pending.sort((a, b) => b.hours - a.hours); // 古いものから
const rows = pending.map(p =>
'<li>' + Math.floor(p.hours / 24) + '日' + Math.floor(p.hours % 24) + '時間 · ' +
esc_(p.from) + ' · <a href="https://mail.google.com/mail/u/0/#all/' + p.id + '">' +
esc_(p.subject) + '</a></li>').join('');
GmailApp.sendEmail(me[0], '【未返信 ' + pending.length + '件】返信待ちのメール',
pending.map(p => p.from + ' / ' + p.subject).join('\n'),
{ htmlBody: '<p>返信していないメールが ' + pending.length + ' 件あります(古い順)。</p><ul>' + rows + '</ul>' });
}
// "山田 <yamada@example.com>" -> "yamada@example.com"
function addr_(s) {
const m = String(s).match(/<([^>]+)>/);
return (m ? m[1] : String(s)).trim().toLowerCase();
}
// 件名・送信元は外部の文字列なので、HTMLとして解釈されないようにする
function esc_(s) {
return String(s).replace(/[&<>"']/g, c => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[c]));
}
書き換えるのは主に WAIT_HOURS(何時間たったら通知するか)と SKIP_FROM(除外したい送信元のパターン)です。ラベルが不要なら MARK_LABEL = '' にします。
4. このコードが防いでいる4つの失敗
- 返信したのに「未返信」と出る:スレッドの最後のメールの送信元で判定します。自分のアドレスに加えて、Gmailに登録したエイリアス(
info@などの別名から送った返信)も「自分」として扱います。 - 通知メールだらけで本当の返信漏れが埋もれる:noreply・通知・メルマガっぽい送信元と、プロモーション/SNS/新着タブを除外します。それでも混ざるものは「返信不要」ラベルで個別に外せます。
- 件名に仕込まれたHTMLが通知メールの中で動く:件名と送信元は外部から届く文字列です。通知をHTMLメールで作るときは
<>などをエスケープして、ただの文字として表示します。 - ラベルが付きっぱなしになる:自分が最後に返信したスレッドからは、次の実行で「要返信」ラベルを自動で外します。
5. よくあるつまずき
WAIT_HOURS を 0 にして ▶ で実行してみてください。届いたばかりのメールまで出る/古いものが出ない:対象は
QUERY の newer_than:14d(14日以内)です。検索式は、先にGmailの検索窓に貼って結果を確かめると確実です。チームの共有アドレスで使いたい:このコードは実行した人のGmailを見ます。共有の受信箱で使う場合は、そのアカウントでスクリプトを作ってください。
「Gmailで開く」リンクが別のアカウントを開く:リンクの
/u/0/ を /u/1/ などに変えてください。6. AIはどこに使う?
返信漏れの検出にAIは不要です。役立つのは次の一歩で、未返信になっている問い合わせに、返信の下書きを作っておく使い方です。朝の通知を見たときには下書きができていて、確認して送るだけ、という流れにできます。作り方は Gmailの問い合わせ返信をAIで下書き にまとめています。AIに渡すのは必要な部分だけにし、送る前には必ず人が確認してください。
このページのコードを含む6本を、1つのシートでまとめて動かしたい方へ
無料記事のコードは1本ずつ単独で使う前提のため、同じプロジェクトに複数入れると定数名が衝突します。セット版は添付保存・Slack/Chat通知・古いメール整理・送信元ラベル・シート書き出し・未返信リマインドの6本が同時に動くよう整理し、「今すぐ実行/定期実行ON・OFF(二重登録なし)」メニューと日本語の導入手順を付けました。APIキー不要で、追加費用はかかりません。
Gmail自動化GAS 6本セット(APIキー不要/$9)を見る →Gumroad での販売です。デジタル納品のため、ダウンロード後の返金はお受けできません(不具合時は誠実に対応します)。
自分で設定するのが不安な方へ(ココナラ・日本円):シート1列のAI一括処理と、当日分の自動サマリーメールのGAS2本+日本語手順書を、ココナラで販売しています(3,000円・税抜〜)。初期設定サポート(+4,000円)や、あなたの実データで自動化フローを1つ一緒に作る導入伴走(+12,000円)は任意のオプションです(いずれも税抜)。対応できるかは購入前の見積り相談で確認できます。
ココナラで導入相談・購入する →返信漏れを見つけたら、下書きまで自動で用意したい方へ
届いた問い合わせをAIで分類し、登録した事実(FAQ)だけを使って返信の下書きを作る拡張版です。noreply・通知・メルマガは自動でスキップし、お試しモードで結果を確認してから本番にできます。自動送信はせず、下書きまでです。
Gmail問い合わせ AI 下書き返信・拡張版(FAQ参照・除外送信元・お試しモード/$3)を見る → 請求書PDF+AI添え状・議事録AI要約など、そのまま動くGAS5本+日本語の導入手順書(PRO版・$39)→手で貼って使うプロンプトだけ欲しい方へ:事務AIプロンプト集12種(無料・投げ銭歓迎)
Gumroad での販売です。このページの未返信リマインドのコードは無料で、有料版には含まれていません。AI を使う機能には OpenAI の API キー(従量課金)が必要です。デジタル納品のため、ダウンロード後の返金はお受けできません(不具合時は誠実に対応します)。
Gmailの新着をSlack・Google Chatに通知 · Gmailの受信メールをスプレッドシートに書き出す · Gmailの添付ファイルをドライブに自動保存 · Gmail問い合わせ返信をAIで下書き · Googleフォームの自動返信メール · 無料本:GAS×ChatGPT事務自動化の基本