前回までの記事で、複数ファイルの集計から定型フォーマットへの転記までを自動化しました。最後の仕上げとして、今回は完成したレポートを自動でメール送付する方法を解説します。ここまで実装すれば、「集計→転記→送付」の一連の作業がすべてボタン1つ(スクリプト実行)で完了するようになります。
こんな作業をしている人向けの記事です
- 毎回同じ相手に、同じ文面でレポートを添付して送っている
- 「レポート作成→上司や他部署に送付」までがワンセットの定例業務になっている
- 送り忘れ・送り漏れを防ぎたい
使うライブラリ
Pythonの標準ライブラリであるsmtplibとemailを使います。追加のインストールは不要です。
事前準備:送信用メールアカウントの用意
会社のメールアドレスをそのままスクリプトに使うのは避け、送信専用のアカウント(会社の共有メールアドレスなど)を用意するのがおすすめです。また、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本の記事を組み合わせると、以下のような自動化フローが完成します。
3つを1つのスクリプトにまとめて実行できるようにしておけば、月初の作業がコマンド1つで完了するようになります。慣れてきたら、Windowsのタスクスケジューラやcronを使って「毎月1日の朝9時に自動実行する」ところまで発展させることも可能です。
まとめ
レポートのメール送付まで自動化できれば、「集計→転記→送付」という一連の月次業務がほぼ手離れします。今回のコードをベースに、自分の職場のメール環境(会社のメールサーバーの設定など)に合わせて調整してみてください。

コメント