【コピペOK】完成したExcelレポートをPythonでメール自動送付する方法

前回までの記事で、複数ファイルの集計から定型フォーマットへの転記までを自動化しました。最後の仕上げとして、今回は完成したレポートを自動でメール送付する方法を解説します。ここまで実装すれば、「集計→転記→送付」の一連の作業がすべてボタン1つ(スクリプト実行)で完了するようになります。

こんな作業をしている人向けの記事です

  • 毎回同じ相手に、同じ文面でレポートを添付して送っている
  • 「レポート作成→上司や他部署に送付」までがワンセットの定例業務になっている
  • 送り忘れ・送り漏れを防ぎたい

使うライブラリ

Pythonの標準ライブラリであるsmtplibemailを使います。追加のインストールは不要です。

事前準備:送信用メールアカウントの用意

会社のメールアドレスをそのままスクリプトに使うのは避け、送信専用のアカウント(会社の共有メールアドレスなど)を用意するのがおすすめです。また、GmailなどのWebメールを使う場合は、通常のログインパスワードではなく「アプリパスワード」の発行が必要になることが多いので、事前に確認しておいてください。

サンプルコード

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication

# メール設定
smtp_server = "smtp.gmail.com"
smtp_port = 587
sender_email = "your_address@gmail.com"
sender_password = "アプリパスワードをここに"
receiver_email = "boss@example.com"

# メール本文の作成
msg = MIMEMultipart()
msg["Subject"] = "月次売上報告書"
msg["From"] = sender_email
msg["To"] = receiver_email

body = "お疲れ様です。\n\n月次の売上報告書を添付いたします。\nご確認のほど、よろしくお願いいたします。"
msg.attach(MIMEText(body, "plain"))

# ファイルの添付
with open("報告書_出力.xlsx", "rb") as f:
    attachment = MIMEApplication(f.read(), _subtype="xlsx")
    attachment.add_header("Content-Disposition", "attachment", filename="報告書_出力.xlsx")
    msg.attach(attachment)

# 送信処理
with smtplib.SMTP(smtp_server, smtp_port) as server:
    server.starttls()
    server.login(sender_email, sender_password)
    server.send_message(msg)

print("メールを送信しました")

ポイント解説

  • MIMEMultipart():本文とファイル添付の両方を含んだメールを組み立てるための入れ物です。
  • MIMEText(body, "plain"):メール本文をテキスト形式で追加しています。前回の記事で自動生成した報告書_出力.xlsxをそのまま添付する想定で書いています。
  • MIMEApplication:Excelファイルなどのバイナリファイルをメールに添付するための処理です。rb(バイナリ読み込みモード)でファイルを開くのがポイントです。
  • server.starttls():通信を暗号化してから送信するための処理です。省略するとセキュリティ上のリスクがあるため、必ず入れてください。

セキュリティ面の注意点

  • パスワードをコードに直接書かない:上のサンプルでは分かりやすさのため直接書いていますが、実際に使う際は環境変数(os.environ)や設定ファイルに分離し、コード自体には書き込まないようにしてください。特にこのスクリプトを他の人と共有したり、GitHubなどにアップロードする可能性がある場合は必須です。
  • アプリパスワードを使う:通常のログインパスワードをそのまま使うのは、セキュリティ上避けるべきです。Gmailなど主要なメールサービスでは、アプリ専用のパスワードを別途発行できる仕組みがあるので、そちらを利用してください。

3本の記事を組み合わせた全体の流れ

ここまでの3本の記事を組み合わせると、以下のような自動化フローが完成します。

  1. 複数店舗のExcelファイルを1つに集計(前回の記事)
  2. 集計結果を社内所定のフォーマットに転記(前々回の記事)
  3. 完成したレポートを担当者へ自動送付(今回の内容)

3つを1つのスクリプトにまとめて実行できるようにしておけば、月初の作業がコマンド1つで完了するようになります。慣れてきたら、Windowsのタスクスケジューラやcronを使って「毎月1日の朝9時に自動実行する」ところまで発展させることも可能です。

まとめ

レポートのメール送付まで自動化できれば、「集計→転記→送付」という一連の月次業務がほぼ手離れします。今回のコードをベースに、自分の職場のメール環境(会社のメールサーバーの設定など)に合わせて調整してみてください。

コメント

タイトルとURLをコピーしました