Pythonを使用して毎日メールレポートを自動送信する
以下は、Pythonを使用して毎日メールレポートを自動送信するスクリプトと、そのセットアップ方法の説明です。
セットアップ手順
メールの認証情報を設定:
レポートを送信するメールアカウントの認証情報が必要です(例:Gmail)。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秒待機
解説
メール送信関数:
`send_email_report()`関数は、`smtplib`ライブラリを使用してメールの送信を処理します。この関数はSMTPサーバー(例ではGmailのサーバー)に接続し、認証情報を使用してログインし、指定された受信者にメールを送信します。デイリーレポート関数:
`daily_report()`関数では、毎日のメール内容を準備します。この部分をカスタマイズして、レポートを添付したり、動的なコンテンツを追加したり、データベースから情報を引き出すことができます。メールのスケジューリング:
`schedule`ライブラリを使用して、毎日午前9時に`daily_report()`関数が実行されるように設定しています。スケジュールの時間は、`schedule.every().day.at("09:00")`の行で変更可能です。スクリプトの実行:
スクリプトは無限ループで実行され(`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を使用したデイリーレポートの自動メール送信が可能になります。特定のニーズに合わせてカスタマイズや拡張が可能です。