業務の自動化を進める上で、「定期レポートを作成し、Excel形式でメール送信する」という処理は非常に需要があります。この記事では、Pythonを使ってExcelファイルを生成し、SMTP経由でメールに添付して送信する一連のスクリプトを紹介します。
必要なライブラリのインストール
まずは必要なライブラリをインストールしましょう。
pip install pandas openpyxl
メール送信に必要な標準ライブラリ smtplib
や email
はPythonにあらかじめ含まれているため、追加インストールは不要です。
Excelレポートを生成する処理
以下のように、pandasとopenpyxlを使ってサンプルのレポートデータをExcelファイルに出力します。
import pandas as pd
from datetime import datetime
# サンプルデータの作成
data = {
'日付': [datetime.today().strftime('%Y-%m-%d')] * 5,
'部署': ['営業部', '開発部', '人事部', '総務部', '経理部'],
'売上': [150000, 230000, 120000, 95000, 175000]
}
df = pd.DataFrame(data)
# Excel出力
filename = f'report_{datetime.today().strftime("%Y%m%d")}.xlsx'
df.to_excel(filename, index=False)
メールでExcelファイルを送信する
生成したExcelファイルを、SMTPを使ってメール送信します。以下はGmailのSMTPサーバーを利用した例です。
import smtplib
from email.message import EmailMessage
# メール設定
EMAIL_ADDRESS = 'your_email@gmail.com'
EMAIL_PASSWORD = 'your_app_password'
TO_ADDRESS = 'receiver@example.com'
msg = EmailMessage()
msg['Subject'] = '定期レポート'
msg['From'] = EMAIL_ADDRESS
msg['To'] = TO_ADDRESS
msg.set_content('本日のレポートを送付いたします。')
# ファイル添付
with open(filename, 'rb') as f:
file_data = f.read()
msg.add_attachment(file_data, maintype='application',
subtype='vnd.openxmlformats-officedocument.spreadsheetml.sheet',
filename=filename)
# GmailのSMTPサーバーで送信
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp:
smtp.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
smtp.send_message(msg)
※ Gmailを使う場合、アプリパスワードの利用をおすすめします。2段階認証を有効にし、アプリ専用のパスワードを発行してください。
スケジュール実行の設定(オプション)
このスクリプトを自動実行するには、OSごとにスケジューラを使います。
- Windows: タスクスケジューラで .bat を登録
- macOS/Linux:
crontab
にpython スクリプト.py
を記述
例(Linuxのcrontabで毎朝9時に実行):
0 9 * * * /usr/bin/python3 /path/to/your/script.py
まとめ
Pythonを使えば、手動で行っていたExcelレポート作成とメール送信を、わずか数十行で自動化できます。業務の効率化やヒューマンエラー防止に繋がるため、ぜひ取り入れてみてください。