Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LINE WORKSAdvent Calendar 2024

Day 18

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

Posted at

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

概要

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

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

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

** 返信のドラフトが自動生成されます**
temp_1734488745233.png

** LINE WORKS の Bot で処理内容が通知されます **
temp_1734488813765.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を利用してコードを実行できます。

手順

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)

動作確認

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

まとめ

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

Google Colabノートブック: imap_draft_reply_bot.ipynb


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

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?