Web制作、Web開発の歩き方

初心者のためのDjango入門

■第5話:Djangoのメール送信機能

(最終更新日:2023.07.27)

Djangoフレームワークのイメージ
この記事は5分で読めます!
(絵が小さい場合はスマホを横に)

「メール送信って難しい?」

Django(Python)は、PHPと同じく関数(send_mail)を用いる方法とクラス(EmailMessage)で送る方法、2種類のメール送信方法がある。 今回はその2つの方法について解説したいと思う。 中でもクラスで送る方法は、bccの設定や添付ファイルの設定などを簡単にできるので、おすすめである。 メールが使えれば、会員登録のメール認証やアラートを知らせる機能など、使いどころは多い。ぜひ活用してみよう。


1.Djangoのメール設定(setting.py)

第4話のDjangoの設定の項目でも説明したが、メールを送信するには、まずsetting.pyに設定を記述する必要がある。

setting.pyに記述すべき情報を知るため、まずはメールサーバーをチェックしよう。 ここではStarServerのメールサーバーを例として用いる。 チェックするのはメールアドレス(EMAIL_HOST_USERに相当)、SMTP(EMAIL_HOSTに相当)、ポート番号である。 他のレンタルサーバーの会社、クラウドサービスの会社でも調べれば同様の情報は手に入るはずである。

メールサーバーで見るべき項目(Star Serverの場合)

setting.pyにあるEMAIL_BACKENDはテスト環境の場合はconsole.Emailbackend(下記のコメント部分)を使い、実際送信する場合はSMTPを使う。 そしてEMAIL_HOSTは、先ほどのレンタルサーバーで取得したメールサーバーを指定する。 ポート番号は、先ほど確認した番号(ここでは587)を記述する。 EMAIL_HOST_USERは取得したメールアドレス、EMAIL_HOST_PASSWORDはメールのログインパスワードを使う。 EMAIL_USE_TLSは文章を暗号化するかどうかなので、ここは必ずTrueにしよう。これで、メールを送る準備は整った。 あとは関数やクラスで送る命令を準備するだけである。

setting.pyにおけるメール設定

2.send_mail関数で送る方法

先にsend_mail関数で送る方法を説明する。具体的なコードは以下に示す通りである。

send_mail関数の引数はそれぞれ、subject(題名)、message(メッセージの内容)、sender(宛先)、email_list(送り先、複数可)である。 これをDjangoのviewクラスや関数として組み込み、用いる。 下記の例では、会員登録Formを受け取るview関数内でsend_mailを実行した記述である。 Formで送信された内容(登録手続きされた内容)に沿って、メールを送るように設定している。

send_mailの具体例

また、内容の異なるメール複数を一括で送りたい場合、send_mass_mailという関数で実行することができる。 send_mailと殆ど同じだが、 send_mail部分を

mail1 = (subject, message, sender, email_list)
mail2 = (subject, message, sender, email_list)


という形で一旦タプルにする。このタプルを、send_mass_mail(mail1, mail2)という形でsend_mass_mail関数に組み込み、 複数一気に送ることができる。1件1件send_mailで送っても良さそうだが、 send_mass_mailで送った方がメールサーバーへのコネクションが一回で済み、負荷が少ない。 こちらの方法も覚えておこう。

3.EmailMessageクラスで送る方法

上記で説明した関数を用いる方法では、ccの設定をしたり、添付ファイルを送ることはできない。 これらの設定をしたい場合は、EmailMessageクラスを用いる。 EmailMessageクラスの使い方は以下のコードに示す通りである。 各種引数に関しては、django公式ドキュメントを参照してほしい。 このクラスを用いることで、cc, bccの設定や、attachで添付ファイルを指定することができる。 実際、指定して送信した例が下右図の通りになる。添付ファイル(画像)も送信されていることが分かる。 ccや添付ファイルを用いる場合は、こちらのクラスを使用しよう。

(余談だが、簡単なテストメールを送る際は「python manage.py shell」と入力し、 シェルで実行した方が簡単に送信テストできる。今回のEmailMessageクラスの実行も、これでテストをしてから実装した)

EmailMessageクラスによるccの指定と添付ファイルの設定

4.まとめ

今回はDjangoのメール送信機能を紹介した。2種類の方法を紹介したが、基本的にはClassで実装した方が良いだろう。 メール送信機能は会員登録の確認や問い合わせなど、Webサービスを運営する上で欠かせない。是非、使いこなせるようになろう。


▼参考図書、サイト

 「Djangoのツボとコツがゼッタイにわかる本」 大橋亮太 秀和システム
   Sending email  django公式Document
   【Django】簡単にメール送信機能を追加する方法(単一送信・複数送信・ファイル添付) OFFICE54