跳到主要內容

[Django教學16]建構Django網站該知道的Email寄送方式

django_send_email
Photo by Austin Distel on Unsplash
相信大家在使用各大網站時,都會收到各式各樣的電子郵件訊息,像是註冊成功、限時優惠活動、新產品推出或登入通知等,可見發送電子郵件功能在網站與使用者的溝通上扮演非常重要的角色。

使用Python開發網站時,想要在Django框架中加入電子郵件的服務,該如何實作呢?本文將以[Django教學8]Django UserCreationForm實作網站登入驗證及註冊功能分享文章為範例,在註冊成功時,傳送電子郵件通知使用者。其中的重點包含:
  • Django Email SMTP設定
  • Django Email寄送方式
  • Django Email樣板客製化

一、Django Email SMTP設定

在進行實作前,需先利用寄件者的Gmail帳號取得應用程式的Gmail密碼,否則任何應用程式透過Gmail進行郵件傳送時,會被認為不安全而被Google封鎖,而取得的步驟可以參考[Python實戰應用]Python寄送Gmail電子郵件實作教學文章的第二節。

要讓Django所建置出來的網站擁有寄送電子郵件的服務,就需要設定SMTP傳輸協定,而本文將使用Gmail所提供的SMTP伺服器來進行傳送。開啟Django專案中的settings.py檔案,增加以下的SMTP設定:
# SMTP Configuration
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'  #SMTP伺服器
EMAIL_PORT = 587  #TLS通訊埠號
EMAIL_USE_TLS = True  #開啟TLS(傳輸層安全性)
EMAIL_HOST_USER = 'example@gmail.com'  #寄件者電子郵件
EMAIL_HOST_PASSWORD = '****'  #Gmail應用程式的密碼
設定完成後,當Django網站要寄送電子郵件時,GmailSMTP伺服器就會使用應用程式的密碼,登入寄件者的電子郵件,來進行傳送。

二、Django Email寄送方式

接著,開啟Djangoviews.py檔案,在註冊成功的地方,加入寄送電子郵件的功能。這時候就需要引用EmailMessage、settingsrender_to_string,如下範例:
from django.core.mail import EmailMessage
from django.conf import settings
from django.template.loader import render_to_string


# 註冊
def sign_up(request):

    form = RegisterForm()

    if request.method == "POST":
        form = RegisterForm(request.POST)
        if form.is_valid():
            form.save()

            # 電子郵件內容樣板
            email_template = render_to_string(
                'accounts/signup_success_email.html',
                {'username': request.user.username}
            )

            email = EmailMessage(
                '註冊成功通知信',  # 電子郵件標題
                email_template,  # 電子郵件內容
                settings.EMAIL_HOST_USER,  # 寄件者
                ['demo@gmail.com']  # 收件者
            )

            email.fail_silently = False
            email.send()

            return redirect('/login')

    context = {
        'form': form
    }

    return render(request, 'accounts/register.html', context)
在第22行可以看到,EmailMessage類別可以用來建立郵件訊息,而settings模組則可以存取settings.py檔案中的設定值。另外,第17行利用render_to_string方法,讓等一下所設計的HTML型態電子郵件樣板,能夠以字串的型態加入到第24行的郵件內容,進行傳送。

三、Django Email樣板客製化

最後,在Django應用程式(APP)樣板的資料夾(templates\accounts)中,建立剛剛所自訂的「signup_success_email.html」電子郵件樣板,在裡面能夠自訂內容的顯示方式,如下範例:

{{ username }} 您好:

感謝您的註冊!

設計完成後,利用以下指令啟動本地端伺服器:

$ python manage.py runserver

在註冊成功時,就能夠收到Django網站所寄送的電子郵件通知,如下圖:
django_send_email

四、小結

以上就是使用Python進行網站開發時,在Django專案中加入電子郵件寄送服務的方式,詳細的程式碼可以參考下方的GitHub網址,希望有幫助到大家。如果在實作的過程中,有碰到任何問題,歡迎在底下留言,或是到粉絲專頁私訊我,將盡力為各位解答。

如果您喜歡我的文章,請幫我按五下Like(使用GoogleFacebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。

有想要看的教學內容嗎?歡迎利用以下的Google表單讓我知道,將有機會成為教學文章,分享給大家😊










留言

  1. 您好,想請教一個問題,使用Python寄送電子郵件、使用本篇文章的方法寄送電子郵件以及使用第三方(如:mailgun)寄送電子郵件,有甚麼主要的好壞之分嗎?

    回覆刪除
    回覆
    1. 您好,事實上沒有好壞之分,本文使用Django內建的Email模組,已經提供基本的SMTP設定及郵件的樣版客製化,如果第三方套件有提供更多的服務或是有更簡潔的用法,也可以使用,只要選擇自己喜歡或符合需求的即可,謝謝您的提問 :)

      刪除

張貼留言