受信したメールを AI で解析し、内容に応じた下書きを作成し Bot で通知
概要
本記事では、メールを自動取得し、OpenAI API(ChatGPT)を活用して、広告や自動通知のメールは除外したうえで、返信メールのドラフトを生成し 下書きフォルダに保存する方法を紹介します。
さらに処理結果のサマリを LINE WORKS Bot APIを使用して通知し、ドラフトの確認と送信を促す機能も実装しています。
なお、LINE WORKS アドバンスト プランのメール機能を想定していますが、IMAP が利用可能な他のメール サービスでも機能します。
** LINE WORKS の Bot で処理内容が通知されます **
機能概要
- IMAP で新着メールを取得
- 返信が必要なメールを判別
- ChatGPT API を利用して返信内容を自動生成
- 返信メールを RFC822 形式で下書きフォルダに保存
- LINE WORKS Bot API で処理結果サマリを通知
使用技術
- Python
- imaplib: IMAP接続
- email: メール解析・生成
- openai: GPT API(ChatGPT)を利用
- requests: LINE WORKS APIリクエスト
- Google Colab: 環境構築
前提条件
以下の情報・準備が必要です。
- IMAP対応のメールサーバー LINE WORKS ではアドバンスト プラン
- LINE WORKS Bot API 設定済み(Bot ID、アクセストークンなど)
- OpenAI APIキー(ChatGPT使用)
- Python環境(Google Colab で試せます)
環境準備
Google Colabを利用してコードを実行できます。
- Google Colab ノートブック共有URL: こちらから試すことができます
手順
1. 必要ライブラリのインストール
以下のライブラリをインストールします。
!pip install openai requests
2. 設定情報
以下の設定情報を指定してください。
# 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通知
以下のコードを実行し、メール処理を開始します。
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)
動作確認
- Colabノートブックを開いて実行してください。
- IMAPサーバーから新着メールを取得し、返信内容を生成して下書きフォルダに保存します。
- 処理結果がLINE WORKSへ通知されることを確認してください。
まとめ
IMAP を活用し、新着メールの自動処理と返信生成を実現しました。
本 Bot を応用することで、業務効率化やタスク自動化が可能です。
Google Colabノートブック: imap_draft_reply_bot.ipynb
何かご不明点やご提案がありましたら、コメントでお知らせください!