{}const=>[]async()letfn</>var
開発Python

ルーチンの自動化:メールに自動返信するPythonボットを作成する

📩 Pythonでは、受信メッセージに自動的に応答するボットを簡単に作成できます。この記事では、コード例を分析し、基本的なスクリプトと改善のアイデアを示して、より重要なタスクに時間を割くことができるようにします。

К

Kodik

著者

2分で読める

なぜ2025年に必要なのですか? 🕒

メールは、今でも顧客やパートナーとのコミュニケーションの主要な手段です。実際、受信メールの60〜80%は、確認、繰り返しの質問、「こんにちは、教えてください…」などのルーチンです。ボットは週に数時間を解放し、ユーザーへの応答をスピードアップし、メールが「積み重なる」可能性を減らします。

構築するもの⚙️

  • ミニボット IMAP + SMTP 基本的な自動応答用。

  • ルーティング キーワード (例:「支払い」、「協力」)。

  • 「移行方法」の概要 Gmail API (OAuth 2.0) 信頼性のために。

  • 展開計画: cron / APScheduler、ロギング、Docker。

  • セキュリティ最小値: .env、アプリのパスワード、頻度制限.

以下は、最小限の作業バージョンです。

# pip install python-dotenv
import os, imaplib, smtplib, email
from email.mime.text import MIMEText
from dotenv import load_dotenv

load_dotenv()
IMAP = os.getenv("IMAP_SERVER", "imap.gmail.com")
SMTP = os.getenv("SMTP_SERVER", "smtp.gmail.com")
EMAIL = os.getenv("EMAIL_ADDRESS")
PASS  = os.getenv("EMAIL_PASSWORD")  # Gmailのアプリパスワード

def send_reply(to_addr:str, subject:str):
    msg = MIMEText("Thank you! We have received your letter and will reply as soon as possible.")
    msg["Subject"] = f"Re: {subject or ''}".strip()
    msg["From"] = EMAIL
    msg["To"] = to_addr
    with smtplib.SMTP_SSL(SMTP, 465) as smtp:
        smtp.login(EMAIL, PASS)
        smtp.sendmail(EMAIL, [to_addr], msg.as_string())

with imaplib.IMAP4_SSL(IMAP) as imap:
    imap.login(EMAIL, PASS)
    imap.select("INBOX")
    status, data = imap.search(None, '(UNSEEN)')
    ids = data[0].split()
    for msg_id in ids:
        _, raw = imap.fetch(msg_id, "(RFC822)")
        msg = email.message_from_bytes(raw[0][1])
        sender = email.utils.parseaddr(msg.get("From",""))[1]
        subj   = msg.get("Subject","")
        if sender:
            send_reply(sender, subj)
        # 既読にする
        imap.store(msg_id, '+FLAGS', '\\Seen')

💡ヒント:テスト中は、実際に送信する代わりにアクションを記録するために「ドライラン」を追加します。

🔥 10万人以上の学生が参加中

理論を読むのに疲れた?
コーディングの時間だ!

Kodik — 実践でプログラミングを学ぶアプリ。AIメンター、インタラクティブなレッスン、実際のプロジェクト。

🤖 AI 24時間
🎓 修了証
💰 無料
🚀 始める
今日参加

よりスマートに:キーワードに関する回答 🧭

最も単純なロジック:メールの件名と本文を見て、返信テンプレートを選択します。

KEYMAP = {
    "payment": "Regarding payment: the invoice has been sent, the terms are 1-2 banking days. If you need an act, please reply to this letter.",
    "cooperation": "Thank you for your interest! Please write briefly about your audience and format, and we will get back to you with a proposal.",
    "Technical support": "Describe the playback steps and send screenshots/logs — we will help you promptly."
}
DEFAULT = "Thank you for your letter! We are in touch and will get back to you as soon as possible."

def choose_reply(subject:str, body:str) -> str:
    text = f"{subject} {body}".lower()
    for key, template in KEYMAP.items():
        if key in text:
            return template
    return DEFAULT

単純な「インテント」に拡張できます。つまり、複数のキーを検索し、一致の「重み」をカウントして、最適なテンプレートを選択します。

展開と運用 🚀

  • スケジューラ: cron、APSchedulerまたはsystemd - timer。

  • Docker:Pythonバージョンと依存関係を修正し、.envをシークレットとして接続します。

  • ログ:通常の動作の場合はINFOレベル、障害の場合はWARNING/ERRORレベル。エラーはTelegram/Slackに送信してください。

  • 周波数制限: 1 日 1 回以上のアドレスへの応答は避けてください。キャッシュは「過去 24 時間の応答」に保ちます。

  • A/B:自動返信のテキストとメールの件名をテストします。今後のコミュニケーションに影響します。

安全と倫理 🔒

  • .envに秘密を保存し、 App Password または OAuth 2.0、トークンをリポジトリにコミットしないでください。

  • 返信に「自動返信を受け取りました」と、その人に連絡する方法を追加します。

  • 自動アクションのためのドメイン/アドレスのホワイトリストを維持します。問題のあるメールは手動で解析します。

  • メールプロバイダーのポリシーと個人データに関する法律を遵守してください。

📊 Python でメールボットができること

シナリオ

ボットの機能

利点

自動応答

「ありがとうございます、手紙を受け取りました」+ 期限の待ち時間

ルーチンを削減し、最初の応答を加速します

フィルタリング

「支払い」、「協力」、「サポート」のフォルダに入れる

整理された受信トレイ

転送

支払いに関する質問を会計士に送信し、統合に関する質問をテクニカルサポートに送信します

クイックルーティング

キーワード

メールの内容に基づいてテンプレートを選択します

より適切な回答

CRMとの統合

リード/取引を作成し、連絡先を引き出す

透明なファンネル

AIの回答

手紙の要約をもとにLLMを介して文章を生成します

人間味のあるトーン、手作業を減らす

アップグレードのアイデア 💡

  • メールの概要:要約を抽出し、回答に置き換えます。

  • 変数付きテンプレート:送信者の名前、注文番号、期限。

  • アンチループ:自動返信/返信なしに応答せず、Auto-Submittedのヘッダーを確認します。

  • 多言語対応:メールの言語を決定し、テンプレートを選択します。

📎テンプレートをJSON/YAMLに保存し、コードをリリースせずに変更をロールバックします。

B コディケ 私たちはプログラミングの学習を楽しくわかりやすくします。ステップバイステップでスキルを磨くのに役立つ課題を伴う興味深いコースを用意しています。

また、アクティブな テレグラムチャンネル、ここでは素晴らしいアイデアについて話し合い、経験を共有し、課題を一緒に分析します。学習は有益であるだけでなく、楽しいものになります。

コメントを残してください:あなたに必要な自動応答のシナリオは何ですか?「支払い」「サポート」「協力」または独自のものですか?

🎯先延ばしをやめよう

記事は気に入った?
実践の時間だ!

Kodikでは読むだけでなく、すぐにコードを書く。理論 + 実践 = 本当のスキル。

即座に実践
🧠AIがコードを説明
🏆修了証

登録不要 • カード不要