誤送信ガード ─ 機能の詳細仕様
この1ページに全仕様を記載しています。付録の一覧(ドメイン・姓辞書など)は拡張機能のコードから直接表示しており、実際の動作と常に一致します。
0. 基本の仕組み
- 異常がなければそのまま送信し、右下に宛先を約2.6秒表示します(クリック不要)
- 異常があるときだけダイアログを表示。すべての項目をタップで確認するまで送信ボタンは押せません
- 確認した内容は端末内に記憶され、同じ確認は二度と出ません(下表「一度だけ」の機能)
- ダイアログの表示と学習以外の動作は一切ありません。外部への通信もありません
| 機能 | 確認の頻度 |
| 1. 初めての宛先 | 宛先ごとに一度だけ |
| 3. 普段と違う宛先 | アドレスのペアごとに一度だけ |
| 4. 宛名と宛先の不一致 | 宛名×宛先の組ごとに一度だけ |
| 5. 件名スレッドの新しい宛先 | スレッド×宛先ごとに一度だけ |
| 6. 組織の組み合わせ | 組み合わせごとに一度だけ |
| 7. BCC の提案 | 該当するたび(学習しない) |
0-1. 送信の横取りとダイアログ
- 横取りする経路: ①送信ボタンのクリック ②
Ctrl+Enter / ⌘+Enter ③「送信してアーカイブ」ボタン。capture 段階で最初にイベントを受け取るため、すり抜けはありません
- 連打対策: 判定中・ダイアログ表示中の追加の送信操作は無視されます(二重送信しません)
- ダイアログの操作: 各項目をタップ → すべて確認すると「送信」が有効化。Enter キーが既定ボタンとして送信を確定することはありません(Enter はフォーカス中の項目にのみ働きます。表示直後のフォーカスは確認カード上にあるため、勢いで押した Enter はカードの確認にしかなりません。全項目の確認後は Tab で「送信」へ移り Enter/Space でも送信できます)。表示直後 0.4 秒はクリックを無視します(ダブルクリック貫通の防止)。「戻る」・Esc キー・背景クリックでキャンセル
- フェイルセーフ: Gmail の画面構成が変わって宛先を読み取れない場合は「宛先を読み取れません」の目視確認を表示します。拡張が壊れても Gmail 自体の送信機能には影響しません(DOM を改変しないため)
1. 初めての宛先を確認 一度だけ
出る条件: To/Cc/Bcc に、過去に一度も送信していないアドレスが含まれるとき。
出ない条件:
- 一度「確認して送信」したアドレス(回数と表示名も記憶されます)
- 自社ドメイン宛(8 参照)
アドレスの比較は大文字小文字を区別しません。同じアドレスが複数の欄にある場合は1件として扱います。
2. 似たアドレスを警告(注記) 1の付随情報
「初めての宛先」の各行に、以下の注記が付くことがあります。この機能単体でダイアログが増えることはありません。
| 注記 | 正確な条件 |
| 初めてのドメイン |
そのドメインに送信した実績がない(自社ドメインを除く) |
| 「〇〇」の打ち間違い? |
「初めてのドメイン」のとき、次のいずれかと編集距離1〜2:
① 送信履歴にあるすべてのドメイン(件数無制限・自動で増加)
② 付録A の主要ドメイン(全件掲載) |
| 〇〇 と酷似 |
送信履歴のアドレス(最大3,000件)と、次のいずれかを満たす:
① 同一ドメインで、@より前が3文字以上、編集距離が「6文字以上なら2以内・5文字以下なら1以内」
② ドメインが違う場合、アドレス全体が8文字以上で編集距離2以内 |
編集距離 = 1文字の挿入・削除・置換の最小回数。gmial.com→gmail.com は 2(入替)、sato→saito は 1。
3. 普段と違う宛先を警告 一度だけ
送信実績のある宛先どうしの取り違え(例: 佐藤さんのつもりで斉藤さん)を検知します。
出る条件(すべて満たすとき):
- 今回の宛先は送信実績がある(初めてなら 1 で扱う)
- 履歴に「よく送る似たアドレス」が存在する: 送信3回以上、かつ今回の宛先の2倍以上の回数
- 類似の判定は 2 の「〇〇と酷似」と同じ規則
- そのペアをまだ「別人」と確認していない
出ない条件: 似た相手を同じメールに両方入れている(意図的とみなす)/回数が拮抗している(どちらが「普段」か判定できないため黙る)/自社ドメイン宛/確認済みペア。確認時は、その宛先に類似する全ペアを一括で記憶します(同じ宛先に繰り返し出ることはありません)。
4. 宛名と宛先の不一致を警告 一度だけ
4-1. 宛名の抽出
- 対象範囲: 本文(引用・署名を除く)の先頭300文字・最初の5行
- 行頭にある「名前(漢字・カタカナ・英字 1〜8文字)+敬称」だけを宛名とみなします。敬称の一覧は付録D
- 敬称の直後が「行末・空白・、。,,.・::;;//((・行末のへ」のときのみ採用。文中の言及(「鈴木様よりご紹介」「佐藤様におかれましては」)は宛名になりません
- 連名(「佐藤様、田中様」)は両方を抽出します
- 英語は行頭の
Dear (Mr/Ms/Mrs/Dr/Prof/Professor) X 形式のみ
- 抽出しないもの: 付録D の除外語を含む語(お疲れ様・皆様・〇〇会社様 等)/カタカナのみの宛名(社名が多く照合手段がないため)/11文字以上
4-2. 宛先との照合(いずれか一致で警告なし)
- 表示名: 宛先チップの表示名と部分一致(付録C の異体字を正規化して比較。齋藤様→表示名「斉藤」は一致)
- アドレス: 宛名を付録B の姓辞書でローマ字化し、@より前を
. _ - + 数字 で区切った各部分と「完全一致 or 前方一致」(taro.sato@ の sato は一致。saito@ に sato は不一致)。フルネーム宛名(斉藤太郎様)は先頭2〜3文字も姓として試します
- ドメイン: ドメインから記号を除いた文字列に3文字以上のローマ字が含まれる(田中様→
tanaka-shoji.example は一致)
4-3. 警告の出しかた(「疑いの根拠」があるときだけ)
- 抽出した宛名のどれか1つでも宛先に一致すれば、警告は出ません(残りは関係者への言及とみなす)
- どれも一致しない場合でも、次のどちらかの根拠があるときだけ警告します:
① 宛先の中に宛名と紛らわしい相手がいる(例: 斉藤様→sato@…、表示名「佐藤」。ローマ字の比較は2 と同じく「6文字以上なら編集距離2以内・5文字以下なら1以内」、漢字の表示名どうしは1以内)→「〇〇 の打ち間違い?」(〇〇には紛らわしい宛先のアドレスが入ります)
② 履歴に宛名と一致する相手がいる →「過去の宛先 〇〇 宛ての間違い?」(表示名が一致する相手を送信回数より優先)
- 根拠がゼロの場合(宛名と無関係な趣味アドレス・共有窓口など、照合材料が無いだけ)は黙ります。
宛名の書き間違い自体は漏えいに直結しないため検知対象外です
- 確認すると「その宛名×今回の宛先」の組を記憶し、同じ組では二度と出ません
- 宛先が自社ドメインのみのメールでは動作しません
5. 件名スレッドの新しい宛先を警告 一度だけ
5-1. スレッドの同定
- 件名の前後の空白を除去し、小文字化
- 先頭の接頭辞(付録D: re / fw / fwd / 返信 / 転送 / 回答 +「:」「:」)を繰り返し除去
- すべての空白を除去。4文字未満になった件名は対象外(「ご連絡」のような短い定型件名の誤同定を防ぐ)
- ハッシュ値のみ保存します(件名の文字列自体は保存されません)
5-2. 判定
- 「スレッドのメンバー」は2つの情報源の統合です:
①同じ件名で過去に送信したときの学習履歴
②いま返信しているスレッドの参加者(画面のメッセージヘッダから取得)。
②により、拡張の導入直後・履歴ゼロでも初回の返信から検知できます
- メンバーに居ない宛先が今回のメールに含まれるとき警告
- 転送(Fwd:/転送:)は「スレッド外の相手に送る」操作そのもののため、②は使いません(毎回の警告を防ぐ)
- 外部宛先が1件以上あるメールでは外部宛先だけで「一部が新顔か」を判定します。外部が全員入れ替わっている場合は、定型件名の別案件とみなして黙ります(上司などの社内CCが共通でも誤検知しません)
- 送信するたびにメンバーは追記されます(確認して送信した相手は次回からスレッドの一員)
6. 初めての組織の組み合わせを警告 一度だけ
- 出る条件: To/Cc(Bcc は含まない)に外部の組織ドメインが2つ以上あり、その組み合わせで送るのが初めてのとき
- 組み合わせはドメインの集合として記憶します(順序・宛先の人数は無関係)
- 付録A のフリーメールドメインは「組織」として数えません(gmail.com の2人は組織の混在ではないため)
7. BCC の提案
- 出る条件: To/Cc の外部宛先が設定値(既定5、2〜100で変更可)以上のとき。受信者全員が互いのアドレスを見られる状態のため、一斉送信なら BCC を提案します
- Bcc に入れた宛先は数えません(正しく BCC を使っていれば出ません)
- 社内宛先は数えません。ただしフリーメールのアカウントでは全宛先を外部として数えます(gmail.com どうしでも互いのアドレスは個人情報のため)
- この機能だけは「一度だけ」ではなく該当するたびに出ます(宛先の顔ぶれが毎回違うため)
8. 自社ドメイン宛の除外
- From アドレスのドメインを「自組織」とみなし、同じドメイン宛には機能 1〜4 の確認を行いません。自社宛のみのメールでは 4・5 も動作しません
- フリーメール(付録A の全ドメイン)のアカウントでは無効です。同じ gmail.com でも他人だからです。この場合すべての宛先が「外部」として扱われます
- 除外されるのは確認だけで、学習(送信実績の記録)は継続します。設定でこの除外をオフにできます
- From は 作成画面の From 欄 → ページタイトル → 画面右上のアカウント表示 → 直近に取得できた値 の順で読み取ります(ポップアウト窓などでも取得するため)。いずれからも取得できない場合、自社ドメイン除外は働きません(安全側)
9. 学習データとプライバシー
| 保存するもの | 内容 | 上限 |
| 確認済みの宛先 | アドレス・表示名・送信回数・最終送信日時 | 3,000件 |
| 確認済みのドメイン | ドメイン・回数 | —(無制限。2 の照合対象のため削除しません) |
| 組織の組み合わせ | ドメインの集合 | 1,000件 |
| 「別人」確認ペア | アドレスのペア | 1,000件 |
| 宛名の確認 | 宛名×アドレスの組 | 1,000件 |
| 件名スレッド | 件名のハッシュとメンバー(件名の文字列は保存しない) | 500件 |
| 統計 | 送信回数・ダイアログ表示回数 | — |
- 上限のある項目は、超えると古いものから自動削除されます
- 保存先は
chrome.storage.local(この端末の Chrome 内)。要求する権限は storage だけです
- 本文・件名の文章そのものは判定のために読み取るだけで保存しません(保存するのは上の表のとおり、確認済み宛名の氏名部分と件名の復元不能なハッシュのみ)
- 設定画面の「学習データ消去」でいつでも全消去できます。拡張を削除するとデータも消えます
端末間同期(任意・既定ON)
設定「端末間で同期する」がON(既定でON)の間、学習データを圧縮して chrome.storage.sync
にミラーし、同じ Google アカウント・Chrome同期ONの別PCと自動共有します。
PCを買い替えても宛先の学習が引き継がれます。
- 同期領域は容量上限(合計100KB / 1項目8KB / 512項目)があるため、表示名など再学習可能な情報は
同期せず、ドメイン辞書+整数インデックスで圧縮して格納します。当拡張の最大容量
(宛先3000等)が上限内に収まるよう設計しており、通常利用で同期漏れは起きません
(万一超える場合は新しい順に優先し、除外件数を設定画面に表示します)
- これはご自身の Google アカウントの Chrome 同期基盤を使うもので、
開発者や第三者への送信は一切ありません。設定をOFFにすれば、以後データは端末内
(
chrome.storage.local)だけに留まります
- 複数PCの学習は自動で統合(和集合)されます。ストア公開版どうしでのみ有効です
(現在の開発版とストア版は別IDのため互いに同期しません)
10. パフォーマンス(Chrome を重くしない設計)
| 項目 | 実装 |
| 常駐プロセス | なし。background(Service Worker)を持たず、Gmail のタブを閉じれば何も残りません |
| 動作するページ | https://mail.google.com/* のみ。他のサイト・Chrome 本体には一切読み込まれません |
| 読み込みタイミング | document_idle(Gmail の描画完了後)。ページ表示をブロックしません |
| 注入コード量 | 約 113KB(非圧縮・依存ライブラリなし)。参考: 従来型拡張は jQuery+jQuery UI で約 180KB |
| 待機中の負荷 | ゼロ。DOM 監視(MutationObserver)や常駐タイマーを使わず、クリックとキー入力のイベントだけで動作します |
| クリックごとの処理 | 「送信ボタンか?」の判定のみ(数マイクロ秒)。送信ボタン以外では即座に抜けます |
| 送信時の判定 | 宛先読み取り+リスク判定で実測 1ms 未満。極端に長い入力に対しても処理量の上限ガードを設けています |
| メモリ | コード+履歴キャッシュ(上限まで使っても数百KB程度)のみ |
11. 既知の制限
- 予約送信(「送信日時を設定」)の経路はチェックされません(今後対応予定)
- 複数の Google アカウント(/mail/u/0 と /u/1 等)を使い分けている場合、学習した宛先履歴は
アカウント間で共有されます。別アカウントで送信済みの宛先は「初めての宛先」になりません
(アカウント別の学習は今後のバージョンで検討)
- Gmail 本体にある機能(添付忘れの検出・宛先ゼロのブロック・アップロード中の送信ブロック)は重複して実装していません
- 送信回数が拮抗し、宛名も件名も手がかりが無い取り違えは原理的に検知できません。素通し時の宛先表示と、Gmail の送信取り消し(設定で30秒に変更することを推奨)を最終防衛線としてください
12. レビューのお願いの表示条件
ごくまれに、画面右下に「お役に立てていますか?」という小さなカードを表示することがあります。
「静かで、いつもは邪魔しない」という本拡張の原則はこのカードにも適用され、条件をすべて公開します。
- 出る条件(すべて満たすときのみ): 累計送信 20回以上/導入から 7日以上/
確認ダイアログを通過した送信が 1回以上/今回の送信が「異常なしの素通し」だった直後
- 出ない場面: 確認ダイアログの表示中・ダイアログをキャンセルした直後(30分以内)・
厳格モード・「送信時の通知」をオフにしている場合
- 頻度: 表示は生涯 最大2回(2回目は前回から14日以上あけて、無操作で消えた場合のみ)。
ボタンを一度でも操作すると(「今後表示しない」を含む)以後は表示されません
- フォーカスは奪わず、無操作なら15秒で自動的に消えます。✕ ボタンや(カード操作中の)Esc でも
閉じられ、その場合も以後は表示されません。送信を妨げることはありません
- 表示状態はこの端末の Chrome 内にのみ保存され、同期されません。外部への通信もありません
(リンクを押したときに Chrome ウェブストア / GitHub のページが新しいタブで開くだけです)
付録A. 主要ドメイン一覧(フリーメール/typo照合先)
以下の全ドメインが ①typo 照合の対象(2)②「組織」から除外(6)③自社ドメイン除外の無効条件(8)に使われます。
付録B. 姓ローマ字辞書(全件)
宛名(漢字)とメールアドレスを照合するための辞書です。ヘボン式の表記ゆれ(sato / satou / satoh)を含みます。異体字は付録Cで正規化してから引きます。
付録C. 異体字の正規化表(全件)
宛名・表示名の比較時に、左の字を右の字として扱います。
付録D. 敬称・除外語の一覧(全件)
宛名とみなす敬称・役職
宛名として扱わない語(これを含む語は除外)
英語の除外語(Dear の後)
件名から除去する接頭辞
↑ 目次へ戻る
オープンソース(MIT License)。Google™ および Gmail™ は Google LLC の商標です。