Wagtailで超簡単なイベント予約サイトを作る④

こんにちは。

Wagtailで超簡単なイベント予約サイトを以下流れでご紹介していきたいと思います。今回は「④予約完了メール送信」について記載します。

流れ
  1. イベント一覧とイベント詳細ページを作成する
  2. 予約ページを作成する
  3. 予約登録処理
  4. 予約完了メール送信
  5. 予約確認とキャンセル処理を作成する

①~③については以下を参照してください。

Wagtailで超簡単なイベント予約サイトを作る①

2021.02.28

Wagtailで超簡単なイベント予約サイトを作る②

2021.03.01

Wagtailで超簡単なイベント予約サイトを作る③

2021.03.02

今回作るもの

前回予約登録処理をしましたので、登録処理が終わったらメール送信をします。メールはテンプレートを用意して必要事項を入れた状態で送信する形にします。

以下のようなメールを送信します。

メール送信処理

前回作成した、②予約登録履歴情報を使ってメール送信をします。event/models.pyのBookingHistoryに以下を追加します。

from wagtail.admin.mail import send_mail

class BookingHistory(ClusterableModel):
    ...
    def send_book_email(self):

        context = {
            'bookingdata': self,
        }

        email_address = self.user.email
        email_subject = render_to_string('event/email/book_confirmation_subject.txt', context).strip()
        email_content = render_to_string('event/email/book_confirmation_message.txt', context).strip()

        send_mail(email_subject, email_content, [email_address])

SMTPサーバーを使用してメール送信する場合は必要に応じて以下設定をします。
設定値についてはhttps://docs.djangoproject.com/en/3.1/ref/settings/を確認ください。
settings/base.py(もしくはdev.py,production.py)

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'XXXXX'
EMAIL_USE_TLS = True
EMAIL_PORT = 587
EMAIL_HOST_USER = 'XXXXX'
EMAIL_HOST_PASSWORD = 'XXXXX'
DEFAULT_FROM_EMAIL = 'XXXXX'
SERVER_EMAIL = 'XXXXX'

events/views.pyのbookingにメール送信処理を追加します。

def booking(request, event_id):
    ...
    # 予約内容を履歴に登録
    bookingdata = BookingHistory.objects.create(
        ...
    )

    # 予約メールを送信
    bookingdata.send_book_email()
    ...

メールTemplate

件名テンプレートevent/email/book_confirmation_subject.txtを作成します。

ワークショップお申込みを承りました

本文テンプレートevent/email/book_confirmation_message.txtを作成します。

{{ bookingdata.first_name }} {{ bookingdata.last_name }} さま

こんにちは、〇〇です。
この度は、ワークショップへお申し込みいただき、
ありがとうございました。

以下の内容で参加をお受けいたしましたので、
ご確認くださいませ。

━━━ お申込み内容 ━━━━━━━━━━━━━━━━
{{ bookingdata.event.title }}

【日時】{{ bookingdata.event.creation_date | date:"y/n/j H:i"}}
【場所】〒{{ bookingdata.event.zip_code }}
{{ bookingdata.event.address1 }} {{ bookingdata.event.address2 }} {{ bookingdata.event.address3 }}

【参加料】{{ bookingdata.event.price }}円
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

※このメールはシステムからの自動返信です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)