🔖 Day6 - Send Emails (python-decouple)

2018 - 06 - 26
🔖 Day6 - Send Emails (python-decouple)
1. [ Email settings] 利用Django 自用send email 給用戶,例如註冊、重置密碼等,要先在settings.py設定系統的電郵。 到settings.py增設:
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
這裡是設定我們Django 的email後台功能,裡面的console一字是指在localhost發出, 通常我們不會這樣使用,除非是在terminal測試用。所以要把它改成:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = '<username>@gmail.com'
EMAIL_HOST_PASSWORD = '<gmail password>'
上面是以GMAIL作例子,這樣Django就會知識要利用GMAIL渠道發送emails。 但當中實在有太多個人資料,我們可以用python-decouple來隔接填寫parameters。
2. [python-decouple] Python-decouple 是python的open source之一,詳情可以在這裡查看。 到terminal安裝:
pipenv install python-decouple
或是 (假如你沒有安裝pipenv virtual environment)
python -m pip install python-decouple
把step 1裡面的EMAIL BACKEND settings copy & paste到一個新文檔: .env 存放在manage.py的同一層。(即BASE_DIR) 接著把settings.py 裡面的內容改為:
from decouple import config

EMAIL_USE_TLS = config('EMAIL_USE_TLS', cast=bool)
EMAIL_HOST = config('EMAIL_HOST')
EMAIL_PORT = config('EMAIL_PORT', cast=int)
EMAIL_HOST_USER = config('EMAIL_HOST_USER')
EMAIL_HOST_PASSWORD = config('EMAIL_HOST_PASSWORD')
這就利用了python-decouple的config功能,當運行Django時,它會自動把.env裡面的parameters套上。 要留意這裡因為EMAIL_USE_TLS是boolean,所以要使用cast=bool, 同樣地EMAIL_PORT是數字,所以要加上cast=int **題外話** 其他parameters如: settings.py裡面的SECRET_KEY,也可以加到.env內。
3. [send email] 設定好上面的以後,到views.py試寫一個名叫sendmail的功能:
from django.core.mail import send_mail

def sendmail(request)
    send_mail(
        'Email Title',
        'Email Content',
        'xxx@gmail.com',
        ['recipient@xxx.com',],
    )
    return blogindex(request)
留意收件人是一個python list,所以要打成 ['xxx@xxx.com', 'yyy@yyy.com',] 即使只有一位收件人,那一個comma是不可少的。 從urls.pysetup這views function的urlspattern:
from <app>.views import sendmail

urlspattern=[
...
    url(r'^sendmail/$', sendmail, name='email'),
]
到web browser打開 "../sendmail/" ,點擊連結,Django把你置定的Email title, content, 由 (sender) 傳到 (recipient)了。 /* 假如你的GMAIL沒有正常發送email出去,請記得到google account,Allow less secure apps,disable 2-step-verification以及disable captcha */

Comments

There is no comment yet

New Comment

Please Login to comment