【Python】メール本文を自動で解析して分類・保存する方法|受信トレイの自動仕分け処理

【Python】メール本文を自動で解析して分類・保存する方法|受信トレイの自動仕分け処理 Python

日々大量に届くメールの中には、重要なものからスパム、通知メールまでさまざまな種類があります。これらを手動で仕分けするのは非常に手間がかかりますが、Pythonを使えばメールの内容を自動で解析し、指定フォルダに振り分けることが可能になります。本記事ではIMAPを用いたメールの取得、自然言語処理による本文解析、分類別保存の一連の流れを解説します。

IMAPで受信メールを取得する

まずはIMAPを使ってGmailなどのメールサーバから受信トレイのメールを取得します。以下は基本的な接続処理です。

import imaplib
import email

mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('your_email@gmail.com', 'your_password')
mail.select('inbox')

result, data = mail.search(None, 'ALL')
email_ids = data[0].split()

このコードで受信トレイのすべてのメールIDが取得できます。

メール本文を抽出してテキスト化する

続いて、メールの本文をプレーンテキストとして抽出します。

latest_id = email_ids[-1]
result, data = mail.fetch(latest_id, '(RFC822)')
raw_email = data[0][1]

msg = email.message_from_bytes(raw_email)
if msg.is_multipart():
    for part in msg.walk():
        if part.get_content_type() == 'text/plain':
            body = part.get_payload(decode=True).decode()
else:
    body = msg.get_payload(decode=True).decode()

自然言語処理で本文を分類する

メールの本文をキーワードやトピックに応じて分類するには、scikit-learnやNLTKなどのライブラリを使用します。以下は簡単なTF-IDFと分類器の例です。

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB

corpus = [
    "請求書のお知らせです",
    "キャンペーンのご案内",
    "〇〇プロジェクトの進捗について"
]
labels = ["経理", "広告", "業務"]

vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)

clf = MultinomialNB()
clf.fit(X, labels)

text_vec = vectorizer.transform([body])
predicted = clf.predict(text_vec)
print("分類結果:", predicted[0])

メールを分類先フォルダに移動して保存する

分類されたラベルに応じて、メールを該当フォルダへ移動します。IMAPの`COPY`や`STORE`を活用して移動できます。

mail.copy(latest_id, "業務")  # 業務フォルダにコピー
mail.store(latest_id, '+FLAGS', '\\Deleted')
mail.expunge()

まとめ

Pythonを活用すれば、メールの自動仕分け処理を実現することができます。IMAPでメールを取得し、自然言語処理で分類、仕分け先に移動という一連の処理をスクリプト化すれば、日々のメール処理の自動化が可能です。業務効率化に直結するため、ぜひ取り入れてみてください。