日々大量に届くメールの中には、重要なものからスパム、通知メールまでさまざまな種類があります。これらを手動で仕分けするのは非常に手間がかかりますが、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でメールを取得し、自然言語処理で分類、仕分け先に移動という一連の処理をスクリプト化すれば、日々のメール処理の自動化が可能です。業務効率化に直結するため、ぜひ取り入れてみてください。