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.py
setup這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 */