AIで送信前の添付資料を確認する方法|件数・同名の旧版・余計なファイルを照合

架空の案内資料と5通りの添付一覧で、添付漏れ、同名旧版、余計なファイル、同名重複を照合。内容一致と送信承認を分けます。

AIものさし編集部

AIでメールの送信前確認をするときは、本文に「添付しました」と書いてあることと、予定した資料が実際に添付されていることを分けます。添付が1件あっても、それが同名の旧版や署名画像なら、送付したい資料がそろったとはいえません。

この記事では、架空の案内資料1件を送る予定と、5通りの添付一覧を照合します。AIには確認表と不足の説明を作らせ、資料の版、添付内容、送付可否の確認は別に残します。実メールの読取り、AI生成、Outlook操作、送信は行っていません。

送る予定の資料を、添付一覧とは別に定義する

架空の予定は、「案内.txtの版2を、ファイルのコピーとして1件送る」です。資料管理表のD01を今回の基準とし、本文もその内容に合わせます。単にフォルダーの更新日時が新しいという理由で最新版と判定しません。

表は横にスクロールできます

項目今回の架空設定
資料IDD01
ファイル名案内.txt
対象版版2
案内する開始日11月4日
送付方法ファイルのコピー1件
基準となる内容「案内」「版:2」「開始:11月4日」の3行

この表で版2を送付対象としたことは説明用の設定です。実務での承認記録や資料内容の正しさを検証した結果ではありません。送付先と資料の組合せが許可されているか、内容が確定しているかは、担当者が別に確認します。

本文案は「11月4日開始の案内資料(版2)を1件添付します」です。この文が自然でも、添付の状態を証明しません。AIへ本文だけを渡して「添付に問題なし」と答えさせないようにします。

同じ名前でも、添付する内容が違う場合がある

次の5ケースは、独自に作った入力例です。メールクライアントから取得した実際の添付ではありません。

表は横にスクロールできます

ケース添付一覧として渡す内容確認結果
M01添付なし予定した1件がない
M02案内.txt、版1・開始11月3日の内容名前は一致するが基準内容と不一致
M03案内.txt、版2・開始11月4日の基準内容今回の一覧と基準内容は一致
M04基準の案内.txtと内部メモ.txt予定外の1件がある
M05基準の案内.txtを同名で2件件数が予定と違う

M02はファイル名だけを見る検査では見落とします。M05は、ファイル名を集合にして比較するだけなら重複が消え、通ってしまいます。まず件数と名前を確認し、その後で内容を基準へ照合します。

M03も、掲載処理で確認するのは指定した一覧と基準データのSHA-256の一致までです。今回の固定例では独立検算で実バイト一致も確認しましたが、掲載処理はダイジェストを比較しています。宛先、送付許可、メール本文全体、ウイルス検査、受信者が開けることを確認したわけではありません。「一致」を「送信承認済み」へ広げません。

画像・ファイルのコピー・リンクを混ぜない

署名ロゴが本文に表示されていても、D01の案内資料を添付したことにはなりません。添付の有無だけではなく、予定した資料に対応する項目があるかを見ます。メールクライアントによって画像やファイルの表示方法も異なるため、表示件数だけを共通の判定規則にしません。

MicrosoftのOutlook公式案内は、ファイルをコピーとして添付する方法と、OneDriveなどのファイルへのリンクを送る方法を区別しています。リンクならアクセス権の確認も別に必要です。今回の例はコピー1件が予定なので、リンクだけへ変わっていたら送付方法の変更として確認します。Microsoft:ファイル添付とリンク(新しいタブで開く)

リンクが本文にあること、リンクが開けること、対象資料の版が正しいこと、相手がアクセスできることは別の確認です。AIがURL文字列を見ただけで、相手の閲覧権限まで確認済みとは書かせません。

内容の指紋は、版の正しさを決めるものではない

基準ファイルと添付予定のデータを取得できる環境なら、内容のハッシュを照合する方法があります。Pythonのhashlibは、バイト列からSHA-256などのダイジェストを計算する機能を提供します。Python公式:hashlib(新しいタブで開く)

ハッシュは、基準として選んだデータとの照合に使います。基準自体が旧版なら、その旧版と一致してしまいます。誰が送付対象を決めたか、どの資料ID・版を基準にしたかを、計算とは別に残してください。内容の意味が同じでも、改行や保存形式が違えばバイト列は変わるため、不一致を即座に誤版と断定せず原資料へ戻ります。

次は上の固定例の検算です。日本語の3行をUTF-8へ変換したデータを使います。実ファイルやメールへ接続するコードではありません。

from hashlib import sha256

filename = "案内.txt"
approved = "案内\n版:2\n開始:11月4日\n".encode("utf-8")
old = "案内\n版:1\n開始:11月3日\n".encode("utf-8")
reference_digest = sha256(approved).digest()

def check(items):
    if len(items) != 1 or items[0][0] != filename:
        return "LIST_REVIEW"
    if sha256(items[0][1]).digest() != reference_digest:
        return "CONTENT_MISMATCH"
    return "HASH_MATCH_ONLY"

cases = {
    "M01": [],
    "M02": [(filename, old)],
    "M03": [(filename, approved)],
    "M04": [(filename, approved), ("内部メモ.txt", b"internal")],
    "M05": [(filename, approved), (filename, approved)],
}
results = {key: check(items) for key, items in cases.items()}
assert results == {
    "M01": "LIST_REVIEW", "M02": "CONTENT_MISMATCH",
    "M03": "HASH_MATCH_ONLY", "M04": "LIST_REVIEW",
    "M05": "LIST_REVIEW",
}
assert approved != old
print(results)

このコードは、入力一覧がすでに正確に取得できたという前提です。署名画像の除外、メール形式の解析、添付データの取得、複数の予定資料、送付権限を扱いません。ファイル名しか分からないときは内容を照合できないため、「名前だけ確認、内容未確認」と残します。

添付忘れの警告を、資料照合の代わりにしない

Outlookの公式案内の「新しいOutlook for Windows」と「従来のOutlook」の両節では、本文に添付への言及があるのに添付しない場合の警告を説明しています。その両節では、この機能は本文のテキストが英語(米国)として書式設定されている場合に限られるとしています。アプリ全体の表示言語とは別の条件です。Microsoft:添付忘れの警告(新しいタブで開く)

この対象版の説明をWeb・Mac・モバイルへ一般化しません。また、日本語本文でも常に検知する、資料の版や余計な添付まで判定する、という保証へ読み替えません。今回、手元のOutlookで警告を再現したわけではありません。利用する環境での動作確認と、資料の一覧・内容照合を分けて扱います。

AIへは、確認できた範囲を返させる

架空の送付予定D01と、添付一覧M01~M05を照合してください。
予定は案内.txtの版2、11月4日開始の内容をコピーで1件送ることです。
各ケースについて、件数・ファイル名・内容・送付方法を分けて示してください。
余計な添付と同名重複を、集合比較だけで見落とさないでください。
入力にない添付、ファイル内容、閲覧権限を確認済みとしないでください。
出力:ケースID、確認できたこと、不一致、未確認、次の確認事項。
基準内容が一致しても送信可とは判断しないでください。
この依頼ではメールの取得、送信、共有権限の変更は行いません。

これは手製の依頼例で、AIサービスを使った実測ではありません。照合表を作った後は、送信担当者が作成中メールの実際の添付を開き、基準資料と本文へ戻って確認します。資料を差し替えたら、前の照合結果を使い回さず、添付一覧と内容を取り直します。

確認記録には、本文版、資料ID・版、添付一覧、基準との照合範囲、未確認事項を残します。資料照合の完了と、送信の承認、送信完了、相手の受信・閲覧を分ければ、「確認したつもり」の範囲を広げずに引き継げます。

参考資料

公式資料の確認日:2026年10月20日。資料、本文案、添付一覧、内容照合は独自の架空例です。掲載Pythonと固定例をローカルで検査しました。実メール、添付取得、Outlook警告、AI生成、送付権限、送信、受信・閲覧、画面表示は未検証です。

質問から自分に合うAIを探す