python

本記事は以前Qiitaに投稿した内容を本ブログに持ってきています。

概要

先日、業務で「PythonでExcelを添付してメールを送信する」機能を試行錯誤して実装しました。
Djangoのメール送信機能を使ったら、わりかし簡単に実装できたので、自分と同じに状況になるかもしれない人のために記事を作成しました!

環境

Python 3.7
Django 2.2
※ Djangoを利用していないと本記事の実装はできません。

事前準備

openpyxlをインストールします。

$ pip install openpyxl

メールサーバの設定

プロジェクトのsettings.pyに送信先の情報を追加します。
送信するメールサーバの情報を記載してください。
settings.py

EMAIL_HOST = '00.00.00.00' # 送信メールサーバ
EMAIL_PORT = '000'         # 送信メールポート

メールに添付するExcelを整える

添付したいExcelをbytesオブジェクトに変換します。
これをしないとメール送信ができません。

from openpyxl import load_workbook
from io import BytesIO

wb = load_workbook('test.xlsx') # 添付したいExcelを読み込む
excelfile = BytesIO()
wb.save(excelfile)              # Excelをbytesオブジェクトに変換する

メールをExcelを添付して送信する

以下、コードでメール送信ができます!!

from django.core.mail import EmailMessage

subject = "件名"
body = "本文です。"
send_from = "hogehoge1@gmail.com" # 送信者
send_to = ["hogehoge2@gmail.com"] # 宛先リスト
bcc = ["hogehoge3@gmail.com"] # Bccリスト

email = EmailMessage(subject, body, send_from, send_to, bcc)
email.attach('test.xlsx', excelfile.getvalue(), 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
email.send()

参考資料

https://speakerdeck.com/thinkami/djangocongress-jp-2019-talk https://narito.ninja/blog/detail/64/