見出し画像

Pythonを使用して毎日メールレポートを自動送信する

以下は、Pythonを使用して毎日メールレポートを自動送信するスクリプトと、そのセットアップ方法の説明です。

セットアップ手順

  1. メールの認証情報を設定:
    レポートを送信するメールアカウントの認証情報が必要です(例:Gmail)。2段階認証を使用している場合、アプリ用パスワードが必要になるか、"安全性の低いアプリのアクセス"を許可する必要があります。

  2. スクリプトの作成:

完全なPythonスクリプト

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import schedule
import time

def send_email_report(sender_email, sender_password, receiver_email, subject, message_body):
    """
    指定された件名と本文を含むメールレポートをsender_emailからreceiver_emailに送信します。

    Args:
        sender_email (str): 送信者のメールアドレス
        sender_password (str): 送信者のメールアカウントのパスワード
        receiver_email (str): 受信者のメールアドレス
        subject (str): メールの件名
        message_body (str): メールの本文
    """
    # メールオブジェクトの作成
    msg = MIMEMultipart()
    msg['From'] = sender_email
    msg['To'] = receiver_email
    msg['Subject'] = subject
    
    # 本文の追加
    msg.attach(MIMEText(message_body, 'plain'))
    
    try:
        # SMTPサーバーの設定
        server = smtplib.SMTP('smtp.gmail.com', 587)
        server.starttls()  # 接続を暗号化
        server.login(sender_email, sender_password)  # メールサーバーにログイン
        
        # メールの送信
        server.send_message(msg)
        print(f"メールが{receiver_email}に正常に送信されました")
    except Exception as e:
        print(f"メールの送信に失敗しました: {str(e)}")
    finally:
        server.quit()

def daily_report():
    """
    毎日のレポートメールを準備して送信します。この部分でレポートの内容をカスタマイズします。
    """
    sender_email = "your_email@gmail.com"
    sender_password = "your_email_password"
    receiver_email = "receiver_email@example.com"
    
    subject = "デイリーレポート"
    message_body = "これはあなたのデイリーレポートです。詳細は添付ファイルをご覧ください。"
    
    send_email_report(sender_email, sender_password, receiver_email, subject, message_body)

# 毎日特定の時間にレポートを送信するようスケジュール設定
schedule.every().day.at("09:00").do(daily_report)

if __name__ == "__main__":
    print("スケジューラーが開始されました。デイリーレポートの送信を待っています...")
    while True:
        schedule.run_pending()
        time.sleep(60)  # スケジュールを確認するまで60秒待機

解説

  1. メール送信関数:
    `send_email_report()`関数は、`smtplib`ライブラリを使用してメールの送信を処理します。この関数はSMTPサーバー(例ではGmailのサーバー)に接続し、認証情報を使用してログインし、指定された受信者にメールを送信します。

  2. デイリーレポート関数:
    `daily_report()`関数では、毎日のメール内容を準備します。この部分をカスタマイズして、レポートを添付したり、動的なコンテンツを追加したり、データベースから情報を引き出すことができます。

  3. メールのスケジューリング:
    `schedule`ライブラリを使用して、毎日午前9時に`daily_report()`関数が実行されるように設定しています。スケジュールの時間は、`schedule.every().day.at("09:00")`の行で変更可能です。

  4. スクリプトの実行:
    スクリプトは無限ループで実行され(`while True`)、毎60秒ごとにスケジュールされたタスクがあるかどうかを確認します。`schedule.run_pending()`関数で、実行待ちのジョブをチェックし実行します。

重要ポイント

  • セキュリティ:
    Gmailを使用する場合、"安全性の低いアプリのアクセス"を許可する必要があるか、2段階認証を有効にしている場合はアプリパスワードを生成する必要があります。

  • エラーハンドリング:
    スクリプトには基本的なエラーハンドリングが含まれています。メール送信が失敗した場合に詳細なエラーログや通知を追加することができます。

  • レポートのカスタマイズ:
    メール本文はプレーンテキストですが、HTMLに変更する場合は`MIMEText(message_body, 'plain')`の部分を`'html'`に変更し、HTML形式のコンテンツを添付することが可能です。

  • 高度なスケジューリング:
    より複雑なスケジュール(例:曜日ごとに異なる時間)を設定したい場合は、`schedule`ライブラリでさらにルールを追加できます。

例:PDFレポートの添付

レポートをPDFとして添付したい場合のカスタマイズ例です。

from email.mime.base import MIMEBase
from email import encoders

def send_email_with_attachment(sender_email, sender_password, receiver_email, subject, message_body, file_path):
    # メールオブジェクトとメッセージは前述の通り
    msg = MIMEMultipart()
    msg['From'] = sender_email
    msg['To'] = receiver_email
    msg['Subject'] = subject
    
    msg.attach(MIMEText(message_body, 'plain'))

    # ファイルの添付
    with open(file_path, "rb") as attachment:
        part = MIMEBase('application', 'octet-stream')
        part.set_payload(attachment.read())
        encoders.encode_base64(part)
        part.add_header(
            'Content-Disposition',
            f'attachment; filename= {file_path}',
        )
        msg.attach(part)
    
    # メール送信ロジックは前述の通り

これで、Pythonを使用したデイリーレポートの自動メール送信が可能になります。特定のニーズに合わせてカスタマイズや拡張が可能です。

いいなと思ったら応援しよう!