メールを AI で自動処理: 必要なら下書きを作成し、LINE WORKS Bot で通知する


# 受信したメールを AI で解析し、内容に応じた下書きを作成し Bot で通知

## 概要
本記事では、メールを自動取得し、OpenAI API（ChatGPT）を活用して、広告や自動通知のメールは除外したうえで、返信メールのドラフトを生成し **下書きフォルダ**に保存する方法を紹介します。

さらに処理結果のサマリを **LINE WORKS** Bot APIを使用して通知し、ドラフトの確認と送信を促す機能も実装しています。

なお、LINE WORKS アドバンスト プランのメール機能を想定していますが、IMAP が利用可能な他のメール サービスでも機能します。

** 返信のドラフトが自動生成されます**
![temp_1734488745233.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/110e124d-c18b-3d6b-4f51-45db10029810.png)

** LINE WORKS の Bot で処理内容が通知されます **
![temp_1734488813765.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/fc53e8b4-6772-4319-376a-c7f6cdbd8d7f.png)

## 機能概要
- **IMAP で新着メールを取得**
- **返信が必要なメールを判別**
- **ChatGPT API を利用して返信内容を自動生成**
- **返信メールを RFC822 形式で下書きフォルダに保存**
- **LINE WORKS Bot API で処理結果サマリを通知**

## 使用技術
- **Python**
- **imaplib**: IMAP接続
- **email**: メール解析・生成
- **openai**: GPT API（ChatGPT）を利用
- **requests**: LINE WORKS APIリクエスト
- **Google Colab**: 環境構築

## 前提条件
以下の情報・準備が必要です。
1. **IMAP対応のメールサーバー** LINE WORKS ではアドバンスト プラン
2. **LINE WORKS Bot API** 設定済み（Bot ID、アクセストークンなど）
3. **OpenAI APIキー**（ChatGPT使用）
4. **Python環境**（Google Colab で試せます）

## 環境準備
Google Colabを利用してコードを実行できます。

- **Google Colab ノートブック共有URL**: [こちらから試すことができます](https://colab.research.google.com/drive/1nOMe5sF51-Dyy4Sikb1L5ji_g8ltrq8E?usp=sharing)

## 手順

### 1. 必要ライブラリのインストール
以下のライブラリをインストールします。

```python
!pip install openai requests
```

---

### 2. 設定情報
以下の設定情報を指定してください。

```python
# IMAP設定
IMAP_SERVER = "imap.example.com"
EMAIL_ACCOUNT = "your_email@example.com"
PASSWORD = "your_password"

# OpenAI APIキー
openai.api_key = "your_openai_api_key"

# LINE WORKS API設定
LINEWORKS_API_URL = "https://www.worksapis.com/v1.0/bots/{botId}/users/{userId}/messages"
BOT_ID = "your_bot_id"
USER_ID = "your_user_id"
ACCESS_TOKEN = "your_access_token"
```

---

### 3. メール処理とLINE WORKS通知
以下のコードを実行し、メール処理を開始します。

```python
import imaplib
import email
from email.header import decode_header
import openai
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import email.utils
import requests
import time

def process_emails():
    mail = imaplib.IMAP4_SSL(IMAP_SERVER)
    mail.login(EMAIL_ACCOUNT, PASSWORD)
    mail.select("inbox")
    status, messages = mail.search(None, "UNSEEN")
    email_ids = messages[0].split()
    draft_summaries = []

    for email_id in email_ids:
        status, msg_data = mail.fetch(email_id, "(RFC822)")
        for response_part in msg_data:
            if isinstance(response_part, tuple):
                msg = email.message_from_bytes(response_part[1])
                subject = decode_header(msg["Subject"])[0][0]
                content = msg.get_payload(decode=True).decode(errors="ignore")
                reply_body = generate_reply(content)
                save_reply_to_drafts(msg, reply_body)
                draft_summaries.append(f"件名: {subject}")

    send_to_lineworks("
".join(draft_summaries))
    mail.close()
    mail.logout()

def generate_reply(content):
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": "あなたはメール返信アシスタントです。"},
            {"role": "user", "content": f"{content}"}
        ]
    )
    return response["choices"][0]["message"]["content"]

def save_reply_to_drafts(msg, reply_body):
    draft = MIMEMultipart()
    draft.attach(MIMEText(reply_body, "plain"))
    mail.append("Drafts", None, None, draft.as_bytes())

def send_to_lineworks(summary_text):
    headers = {
        "Authorization": f"Bearer {ACCESS_TOKEN}",
        "Content-Type": "application/json"
    }
    payload = {"content": {"type": "text", "text": summary_text}}
    requests.post(LINEWORKS_API_URL.format(botId=BOT_ID, userId=USER_ID), headers=headers, json=payload)

# ポーリング実行
print("✅ メール処理ポーリングを開始します。")
while True:
    process_emails()
    time.sleep(60)
```


## 動作確認
1. Colabノートブックを開いて実行してください。
2. IMAPサーバーから新着メールを取得し、返信内容を生成して**下書きフォルダ**に保存します。
3. 処理結果がLINE WORKSへ通知されることを確認してください。

---

## まとめ
IMAP を活用し、新着メールの自動処理と返信生成を実現しました。  
本 Bot を応用することで、業務効率化やタスク自動化が可能です。

**Google Colabノートブック**: [imap_draft_reply_bot.ipynb](https://colab.research.google.com/drive/1nOMe5sF51-Dyy4Sikb1L5ji_g8ltrq8E?usp=sharing)

---

何かご不明点やご提案がありましたら、コメントでお知らせください！