# メールフィルタリング機能 実装引き継ぎドキュメント

## この文書について

この会話はClaude（claude.ai）での設計相談を経て、実装をClaude Codeに引き継ぐためのドキュメントです。  
実装先は **Keinaシステム（keinafarm.net）** です。

---

## 背景・解決したい問題

- メールアカウントが複数あり、スパム・営業メールで溢れかえっている
- 本当に重要なメールはたまにしか来ないため、見落としが発生している
- 単純なアドレス/ドメインブロックでは対処できない複雑なケースがある
  - 同一ドメインのままアカウントだけ変えて送ってくる悪質な送信者
  - サービスは利用中なので完全ブロックできないが通知は不要な送信者
  - 二度とメールを受け取りたくないドメイン
- **フィードバックを積み重ねることで判定が賢くなっていく仕組み**が必要

---

## システム全体像

```
[Xserver/Gmail/Hotmail IMAP]
    ↓ Windmill スケジュール実行（ポーリング）
[メール取得・正規化]
    ↓
[重要度判定エンジン]
├─ 既知送信者 → KeinaシステムのPostgreSQLをルックアップ
└─ 未知送信者 → LLM（Claude API）に件名・送信者・本文冒頭を渡して判定
    ↓ 重要と判断されたメール
[LINE Messaging API で通知]
「件名: ○○ / 送信者: △△
 👉 https://keinafarm.net/mail/feedback/{token}」
    ↓ タップ
[KeinaシステムのDjangoビュー /mail/feedback/{token}]
    ↓ フィードバック選択
[KeinaシステムのPostgreSQL更新]
    ↓ 次回ポーリング時にWindmillが参照
```

---

## 確定している技術スタック

| 役割 | 技術 |
|------|------|
| ワークフロー実行 | Windmill（既にサーバーで稼働中） |
| メール取得 | IMAP統一（Xserver/Gmail/Hotmail） |
| LLM判定 | Claude API（または他のLLM） |
| LINE通知 | LINE Messaging API（既に連携済み・WindmillからのLINE通知も動作確認済み） |
| フィードバック画面 | Keinaシステム（Django）に機能追加 |
| DB | KeinaシステムのPostgreSQL |
| インフラ | Traefik（既存、keinafarm.net管理済み） |

---

## メールアカウント

- **Xserver のメールサービス**（自前ドメイン）→ IMAP
- **Gmail** → IMAP
- **Hotmail（Outlook）** → IMAP

---

## フィードバック画面の仕様

### URL設計
```
https://keinafarm.net/mail/feedback/{token}
```
- `token` はUUID等の推測不可能なワンタイムトークン
- 認証不要でアクセスできること（LINEからタップ一発で開ける）

### フィードバックの選択肢
```
✅ 重要だった（次回も通知）
📧 普通のメール（通知不要だが受信は続ける）
🔇 この送信者は今後通知しない
🚫 この送信者を完全ブロック
🚫🌐 このドメインごとブロック
```

---

## DBテーブル設計（案・要確認）

Keinaシステムの既存PostgreSQLに以下のテーブルを追加する。  
詳細なフィールド定義はClaude Codeと相談しながら確定させること。

### `mail_senders`（送信者ルール）
- email_pattern（アドレスまたはパターン）
- domain
- verdict（allow / mute / block / block_domain）
- reason（メモ）
- last_updated

### `mail_emails`（受信メール記録）
- message_id
- sender
- subject
- received_at
- llm_verdict（LLMの判定結果）
- final_verdict（フィードバック後の確定判定）

### `mail_feedback_tokens`（フィードバック用トークン）
- token（UUID）
- email_id（mail_emailsへの参照）
- created_at
- used_at（使用済みフラグ）

---

## 実装順序（推奨）

1. **DBテーブル設計の確定とマイグレーション**
2. **Djangoのフィードバックビュー作成**（`/mail/feedback/{token}`）
3. **WindmillのIMAPポーリングスクリプト**（まず1アカウントから）
4. **LLM判定ロジック**（件名＋送信者＋本文冒頭をAPIに渡す）
5. **LINE通知（フィードバックURL付き）**
6. **残りのメールアカウントを追加**
7. **判定精度チューニング**

---

## 未決定・要相談事項

- DBテーブルの詳細フィールド定義
- LLMのプロンプト設計（どの情報をどう渡すか）
- WindmillとKeinaシステムDBの接続方法（接続情報の管理）
- フィードバック画面のUI詳細

---

## Keinaシステムについて

- Django + PostgreSQL/PostGIS + Next.jsで構成
- 農業向け圃場管理・補助金申請システム
- keinafarm.net ドメインで稼働
- Traefik + Dockerで管理

---

*この文書はclaude.aiでの設計相談（2026年2月）を元に生成しました。*
