143 lines
5.5 KiB
Markdown
143 lines
5.5 KiB
Markdown
# AI-Powered Mail Automation Engine
|
|
|
|
This project provides a framework for automatically processing emails from an IMAP server based on a user-defined set of rules. It can categorize, archive, or delete emails, serving as a powerful personal email assistant.
|
|
|
|
## Core Concepts
|
|
|
|
The engine works by connecting to an IMAP mail server, fetching unread emails, and processing them according to rules you define in a JSON file. This allows for a highly customizable workflow to manage your inbox.
|
|
|
|
### AI-Powered Classification
|
|
The standout feature is the ability to use Google's Gemini large language model to classify emails based on their content. You define a list of categories, and the AI will determine the most appropriate one for each email. This allows for much more intelligent and nuanced routing than simple keyword matching.
|
|
|
|
### Key Components
|
|
- `main.py`: The main entry point that runs the FastAPI web server and provides the API.
|
|
- `processing_logic.py`: The core module that handles the email processing workflow, including the rule engine.
|
|
- `ai_classifier.py`: The module that communicates with the Gemini API to classify emails.
|
|
- `imap_client.py`: A class that handles all communication with the IMAP server.
|
|
- `config.json`: Stores your sensitive connection details and API keys.
|
|
- `rules.json`: **This is where you define your workflow.** You create rules that match email properties (like sender or subject) or AI classification results, and link them to specific actions.
|
|
- `web/`: Contains the HTML, CSS, and JavaScript files for the web UI.
|
|
|
|
## The 4-Step Workflow
|
|
|
|
Based on the rules you set, the script can perform one of the following actions for each email:
|
|
1. **DEVONthink (Archive):** Downloads the email as a `.eml` file and saves it to a specified folder. This folder can be indexed by DEVONthink for automatic import.
|
|
2. **CATEGORIZE:** Moves the email to a specific mailbox on the server.
|
|
3. **REVIEW:** Moves the email to a "Review" mailbox if it doesn't match any other rule, allowing you to handle it manually.
|
|
4. **TRASH:** Moves the email to the Trash.
|
|
|
|
## Setup and Usage (Local Development)
|
|
|
|
### 1. Configure Credentials (`config.json`)
|
|
|
|
Update `config.json` with your mail server details and your Gemini API key.
|
|
|
|
```json
|
|
{
|
|
"username": "your_email_username",
|
|
"password": "your_email_password",
|
|
"imap": {
|
|
"server": "mail.hyungi.net",
|
|
"port": 993
|
|
},
|
|
"gemini_api_key": "YOUR_GEMINI_API_KEY"
|
|
}
|
|
```
|
|
- You can get a Gemini API key from Google AI Studio.
|
|
|
|
### 2. Define Your Workflow (`rules.json`)
|
|
|
|
This is the most important step. Open `rules.json` and define your email processing logic.
|
|
|
|
To use the AI, first define your categories in the `ai_categories` list. Then, create rules that use the `ai_classification_is` condition.
|
|
|
|
```json
|
|
{
|
|
"ai_categories": ["청구서", "프로젝트 업데이트", "광고", "개인 용무", "기타"],
|
|
"rules": [
|
|
{
|
|
"rule_name": "AI 분류: 청구서는 DEVONthink로",
|
|
"conditions": {
|
|
"ai_classification_is": "청구서"
|
|
},
|
|
"action": {
|
|
"type": "DEVONTHINK",
|
|
"parameters": {
|
|
"devonthink_inbox_path": "/path/on/nas/for/devonthink"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"rule_name": "키워드: 중요한 프로젝트",
|
|
"conditions": {
|
|
"subject_contains": "[Urgent Project]"
|
|
},
|
|
"action": {
|
|
"type": "CATEGORIZE",
|
|
"parameters": {
|
|
"move_to_mailbox": "INBOX/Urgent"
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"default_action": {
|
|
"type": "REVIEW",
|
|
"parameters": {
|
|
"move_to_mailbox": "INBOX/Review"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
- **`ai_categories`**: A list of categories you want the AI to use.
|
|
- **`conditions`**: Can be `subject_contains`, `from_contains`, or `ai_classification_is`.
|
|
- **`action`**: The action to perform (`DEVONTHINK`, `CATEGORIZE`, `TRASH`, `REVIEW`).
|
|
|
|
### 3. Installation
|
|
|
|
This project uses a virtual environment to manage dependencies.
|
|
|
|
**Create the environment (only once):**
|
|
```bash
|
|
python3 -m venv venv
|
|
```
|
|
|
|
**Activate the environment and install packages:**
|
|
(Activate the environment every time you open a new terminal)
|
|
```bash
|
|
source venv/bin/activate
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
### 4. Running the Web Server
|
|
|
|
With the virtual environment activated, run the FastAPI server:
|
|
|
|
```bash
|
|
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
|
|
```
|
|
- The `--reload` flag automatically restarts the server when you make code changes.
|
|
- Access the web UI by opening `http://localhost:8000` in your browser.
|
|
|
|
## Docker
|
|
|
|
You can also build and run this application as a Docker container.
|
|
|
|
### 1. Build the Image
|
|
```bash
|
|
docker build -t mail-manager .
|
|
```
|
|
|
|
### 2. Run the Container
|
|
```bash
|
|
# Make sure your config.json and rules.json are correctly filled out
|
|
docker run --rm -p 8000:8000 -v $(pwd)/config.json:/app/config.json -v $(pwd)/rules.json:/app/rules.json mail-manager
|
|
```
|
|
- `-p 8000:8000`: This maps port 8000 on your local machine to port 8000 in the container, making the web UI accessible at `http://localhost:8000`.
|
|
- `-v`: Using volumes mounts your local configuration files into the container, making it easy to manage them without rebuilding the image.
|
|
|
|
## Roadmap
|
|
|
|
- **Advanced Rule Conditions:** Add more complex conditions to the rule engine (e.g., regex matching, checking for attachments).
|
|
- **Improved Web UI:** Enhance the web interface for a more user-friendly rule editing experience (e.g., with forms instead of raw JSON).
|
|
- **Scheduler:** Implement a scheduler within the application to run the email processing task automatically at regular intervals.
|