メールを大量に受信していると、
- 至急対応が必要なメール
- 今日中に確認すればよいメール
- 後で確認しても問題ないメール
が同じ受信トレイに並びます。
そこで、通常のIMAPメールをAIで分析し、
「緊急」「重要」「通常」の3段階に自動分類する仕組み
を構築します。
この方法ではGmail APIなどの特定サービス専用APIを使用しません。
そのため、
- Xserverメール
- 独自ドメインメール
- 一般的なレンタルサーバー
- GmailのIMAP接続
- Microsoft系メールサービス
など、IMAPに対応しているメール環境で利用できます。
また、現在使用しているOutlookやThunderbirdをそのまま利用できます。
1.改善前の業務
通常はOutlookやThunderbirdを開き、受信トレイのメールを順番に確認します。
たとえば、
- 顧客からの発注
- 見積依頼
- 修正依頼
- 請求関係
- 営業メール
- メールマガジン
- 自動通知
などが混在しています。
そのため、人が1件ずつ件名や本文を確認して重要度を判断します。
改善前
メール受信
↓
Outlook / Thunderbirdを開く
↓
送信者を確認
↓
件名を見る
↓
本文を読む
↓
重要度を判断
↓
対応
メール件数が増えるほど確認作業に時間がかかり、重要なメールを見落とす可能性も高くなります。
2.改善後の仕組み
メールソフトとは別に、小さな監視プログラムを動かします。
メールサーバー
↓
IMAP接続
↓
新着メール取得
↓
ルール判定
↓
AI判定
↓
重要度を決定
↓
IMAPフォルダへ移動
↓
緊急なら通知
メールソフト側では、
受信トレイ
AI-緊急
AI-重要
AI-通常
というフォルダが表示されます。
OutlookでもThunderbirdでも、通常のIMAPフォルダとして利用できます。
3.Outlook・Thunderbird自体にAIを組み込むわけではない
この仕組みで重要なのは、
OutlookやThunderbirdの中でAIを動かす必要はない
という点です。
AI判定は別プログラムで行います。
たとえばPythonで、
mail-ai-monitor.py
というプログラムを常時動作させます。
このプログラムがメールサーバーへIMAP接続します。
OutlookやThunderbirdは、同じメールサーバーへ通常通り接続します。
つまり、
┌→ Outlook
メールサーバー ├→ Thunderbird
└→ AI監視プログラム
という構成です。
4.IMAP方式のメリット
Gmail APIなどを使う方法と比較すると、IMAP方式には次のメリットがあります。
- 特定メールサービスに依存しにくい
- 独自ドメインメールでも使える
- OutlookでもThunderbirdでも使える
- 既存のメール環境を変更しなくてよい
- メールサーバーを変更しても対応しやすい
特に複数の会社や複数のメールサーバーで利用する業務改善システムとして考える場合、IMAP方式は汎用性があります。
5.重要度は3段階にする
メールを、
緊急
すぐ確認する必要があるメール。
例:
- 至急
- 緊急
- 本日中
- 発注
- キャンセル
- 納期トラブル
- システム障害
- クレーム
重要
急ぎではないものの、確実に確認するメール。
例:
- 見積依頼
- 修正依頼
- 打ち合わせ
- 請求
- 契約
- 顧客からの問い合わせ
通常
すぐに確認する必要がないメール。
例:
- メールマガジン
- 広告
- 営業案内
- 定期通知
6.最初にルール判定を行う
すべてをAIだけで判断させるのではなく、簡単なルール判定を先に行います。
例:
| 条件 | スコア |
|---|---|
| —– | –: |
| 重要顧客 | +30 |
| 至急 | +40 |
| 緊急 | +40 |
| 発注 | +25 |
| 本日中 | +30 |
| 見積 | +15 |
| 修正依頼 | +15 |
| メルマガ | -30 |
| 営業メール | -40 |
これにAIの判定結果を組み合わせます。
7.AIにはメール全体の意味を判断させる
キーワードだけでは誤判定する場合があります。
たとえば、
急ぎではありませんので、来週までにお願いします。
という文章です。
「急ぎ」という言葉だけを見ると緊急メールに見えます。
しかし文章全体では緊急ではありません。
そこでAIに、
- 送信者
- 件名
- 本文
- 期限
- 要求内容
を確認させます。
AIには次のようなJSONを返させます。
{
"priority": "important",
"score": 68,
"category": "estimate",
"summary": "Webサイト修正についての見積依頼",
"action_required": true,
"deadline": "2026-08-28",
"reason": "顧客からの依頼だが、即日対応の指定はない"
}
8.IMAPでメールを取得する
Pythonには標準で、
imaplib
があります。
基本的には、
import imaplib
mail = imaplib.IMAP4_SSL("mail.example.jp", 993)
mail.login(
"user@example.jp",
"password"
)
mail.select("INBOX")
のようにメールサーバーへ接続します。
実際にはパスワードをソースコードへ直接書かず、環境変数などへ保存します。
9.未読メールを取得する
たとえば、
status, data = mail.search(None, "UNSEEN")
として、未読メールを取得できます。
ただし実運用では、
未読=未処理
としてしまうと問題が起こる場合があります。
OutlookやThunderbirdで人が先に開いて既読にしてしまう可能性があるからです。
そのため、実際には、
UID
を記録して、
AIがまだ処理していないメールかどうか
を判断する方法が適しています。
10.処理済みUIDを保存する
SQLiteなどへ、
message_uid
processed_at
priority
score
を保存します。
例:
10251
10252
10253
まで処理済みなら、
次回は、
10254以降
だけ処理します。
これにより、OutlookやThunderbirdで既読にしても問題ありません。
11.IMAPフォルダを作成する
メールサーバー側へ、
AI-緊急
AI-重要
AI-通常
というフォルダを作ります。
Pythonから作成することもできます。
mail.create("AI-Urgent")
mail.create("AI-Important")
mail.create("AI-Normal")
日本語フォルダ名はIMAPの文字コード処理が必要になるため、プログラム内部では英数字にしておく方が簡単です。
表示上は日本語フォルダ名にすることもできます。
12.メールをフォルダへ移動する
たとえばAI判定が、
urgent
なら、
AI-Urgent
へ移動します。
同様に、
important
→ AI-Important
normal
→ AI-Normal
とします。
これらはIMAPサーバー側のフォルダなので、OutlookとThunderbirdのどちらから見ても同じ状態になります。
13.Outlookでの実装例
Outlook側では特別なAI設定は必要ありません。
通常通りIMAPアカウントを登録します。
AIプログラムがメールを分類すると、
受信トレイ
AI-Urgent
AI-Important
AI-Normal
というフォルダがOutlookに同期されます。
Outlookでの利用イメージ
AI-Urgent
├─ ○○株式会社 発注について
└─ △△会社 サーバートラブル
AI-Important
├─ 見積依頼
└─ Web修正依頼
AI-Normal
├─ メルマガ
└─ 営業案内
14.Thunderbirdでの実装例
Thunderbirdでも考え方は同じです。
IMAPアカウントを登録しておけば、AIプログラムが作ったフォルダが同期されます。
つまり、
AI-Urgent
AI-Important
AI-Normal
をThunderbird上でも確認できます。
Thunderbird独自のメッセージフィルターを使う必要はありません。
むしろ、
分類処理をPython側へ統一
した方が、
- Outlook
- Thunderbird
- Webメール
- スマートフォン
のどこから見ても同じ分類結果になります。
15.OutlookとThunderbirdを同時に使う場合
IMAPの大きなメリットです。
たとえば、
会社PC
Outlook
自宅PC
Thunderbird
スマートフォン
標準メールアプリ
という構成でも、
すべて同じメールサーバーを見ています。
AIが、
AI-Urgent
へ移動したメールは、
どの端末から見ても同じフォルダに表示されます。
16.「移動」ではなく「コピー」も検討する
最初の試験運用では、メールをいきなり受信トレイから移動しない方が安全です。
たとえば、
受信トレイ
↓
AI-Urgentへコピー
として、
元のメールを受信トレイへ残します。
AI判定に問題がないことを確認してから、
コピー
↓
移動
へ変更します。
17.個人的には「フォルダ移動」よりフラグ方式を推奨
IMAPにはフラグがあります。
そのため、メールを物理的に移動せず、
受信トレイ
へ残したまま管理する方法もあります。
ただし標準IMAPのフラグだけでは、
緊急
重要
通常
の3段階をOutlook・Thunderbirdの両方で同じように表示するのは少し扱いにくくなります。
汎用性を優先するなら、
専用IMAPフォルダ方式
の方が分かりやすいです。
18.緊急メールだけWindows通知する
AIが、
urgent
と判断した場合だけ通知します。
例:
緊急メールを受信
送信者:
○○株式会社
件名:
Webサイトが表示されません
重要度:
96 / 100
AI要約:
公開サイトが表示されないため、
早急な確認が必要です。
Windows通知であればPythonから実装できます。
19.通知とメールソフトは分離する
重要な設計ポイントです。
OutlookやThunderbirdの標準通知を使うと、
すべての新着メール
が通知される可能性があります。
そこで、
Outlook / Thunderbird
→ 通常メール通知OFF
AIプログラム
→ 緊急だけ通知
という運用にします。
これによって、
「通知が来た=確認するべきメール」
という状態を作れます。
20.Codexに実装させる場合
Codexには一度に全部作らせるより、段階的に実装させます。
STEP 1
IMAPへ接続する。
メールサーバーへIMAP SSL接続し、
最新メールの送信者・件名・本文を取得する
STEP 2
処理済みUIDをSQLiteへ保存する。
STEP 3
キーワードと送信者によるスコアリングを追加する。
STEP 4
OpenAI APIへメール内容を渡し、
urgent
important
normal
を判定する。
STEP 5
IMAPフォルダへ分類する。
STEP 6
urgentの場合だけWindows通知する。
STEP 7
ログ画面を追加する。
21.推奨ファイル構成
imap-ai-mail/
├─ app.py
│
├─ mail/
│ ├─ imap_client.py
│ ├─ parser.py
│ └─ folders.py
│
├─ classifier/
│ ├─ rules.py
│ ├─ openai_classifier.py
│ └─ priority.py
│
├─ notification/
│ └─ windows.py
│
├─ config/
│ ├─ senders.yaml
│ ├─ keywords.yaml
│ └─ settings.yaml
│
├─ database/
│ └─ mail.db
│
└─ logs/
この構成なら、メールサーバーが変わっても主に設定ファイルを変更するだけで対応できます。
22.Outlook版・Thunderbird版を別々に作る必要はない
ここは大きなポイントです。
実際には、
Outlook用プログラム
Thunderbird用プログラム
を別々に作る必要はありません。
作るのは、
IMAPメールサーバー用AI分類プログラム1つ
だけです。
Outlook
↑
│
メールサーバー ← AI分類プログラム
│
↓
Thunderbird
OutlookもThunderbirdも結果を見るだけです。
23.IMAP IDLEを使えば新着を素早く検知できる
単純な方式では、
1分ごと
などにメールサーバーへ問い合わせます。
ただしIMAPには、
IDLE
という仕組みがあります。
対応しているメールサーバーなら、新着メールを比較的素早く検知できます。
そのため、
メール到着
↓
数秒程度で検知
↓
AI判定
↓
緊急なら通知
という構成も可能です。
ただしサーバーによってIDLE対応状況や接続維持時間が異なるため、
IDLE
+
一定時間ごとの再接続
という設計にします。
24.実運用ではAIに送る前に前処理する
メールには、
- HTML
- 署名
- 過去の返信履歴
- 広告
- メールフッター
などが大量に含まれることがあります。
そのままAIへ送るのではなく、
HTML除去
↓
署名除去
↓
引用文除去
↓
本文抽出
↓
AI判定
とします。
API使用量の削減と判定精度向上の両方に効果があります。
25.添付ファイルは第2段階にする
最初のバージョンでは、
From
Subject
本文
だけをAI判定対象にします。
PDFやExcelなどの添付ファイル解析は後から追加します。
添付ファイルまで処理すると、
- セキュリティ
- API費用
- 処理時間
- ファイル形式
- マルウェア対策
など、設計する項目が増えるためです。
26.セキュリティ上の注意
IMAPパスワードやOpenAI APIキーは、
password = "xxxx"
のようにソースコードへ記載しません。
.envなどへ保存し、
IMAP_HOST=
IMAP_USER=
IMAP_PASSWORD=
OPENAI_API_KEY=
として管理します。
メール本文や認証情報をAI処理に使う際は、情報セキュリティの基本を踏まえ、送信する情報の範囲と保管方法を決めてください。
.envはGitへ登録しないようにします。
27.この方式が向いているケース
特に向いているのは、
- 独自ドメインメールを利用している
- Gmailに限定したくない
- Outlookを使っている
- Thunderbirdを使っている
- 複数PCで同じメールを見る
- 将来的に他社へ提供したい
といったケースです。
Gmailだけで同様の通知を小さく試す場合は、Gmailの重要メールをAIで自動判定し、緊急メールだけ通知するを参照してください。
まとめ
通常のIMAPを利用すれば、
IMAP
↓
AI重要度判定
↓
緊急 / 重要 / 通常
↓
メールサーバー上で分類
↓
Outlook・Thunderbirdへ同期
↓
緊急だけ通知
というシステムを構築できます。
この方式ではOutlookやThunderbirdを改造する必要はありません。
AI処理をメールソフトから独立させ、メールサーバー側のIMAPを基準に処理する
のがポイントです。
これならOutlookからThunderbirdへメールソフトを変更しても、AI分類システムを作り直す必要がありません。
また、将来的にWebメールやスマートフォンを追加しても、同じ分類結果を利用できます。