參考原文:Django筆記(Django郵件發送、Django郵箱驗證碼實現)
目錄
單單發送郵件
1.settings.py 配置(注意:要開啓IMAP服務 才能發送郵件 ,在郵箱設置裏的賬戶設置中)
# 郵件配置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.qq.com' # 如果是 163 改成 smtp.163.com
EMAIL_PORT = 25 # 或者 995是設置了 SSL 加密方式
EMAIL_HOST_USER = '[email protected]' # 發送者賬號
EMAIL_HOST_PASSWORD = '****' # 授權碼(****)
EMAIL_USE_TLS = True # 必須開啓
EMAIL_FROM = "[email protected]" # 發送者
2.url路由配置
urlpatterns = [
url(r'^send_many_email/$', v2.send_many_email), # 發送多封郵件
url(r'^send_my_email/$', v2.send_my_email), # 發送單封郵件
]
3.views 視圖
from django.shortcuts import render,HttpResponse
from django.conf import settings
# django自帶的郵件發送模塊
from django.core.mail import send_mail,send_mass_mail
def send_many_email(requeset):
""" 發送多個人 """
title = "美團騎手offer" # 郵件標題
content1 = "該點外賣啦" # 郵件內容
email_from = settings.EMAIL_FROM # 發送者
reciever1 = [
'[email protected]', # 接收者
]
content2 = "吃飯睡覺不想敲代碼"
# 郵件1
msg1 = (title, content1, email_from, reciever1)
# 郵件2
msg2 = ("渣渣們", content2, email_from, ['[email protected]', '[email protected]'])
send_mass_mail((msg1,msg2), fail_silently=True)
return HttpResponse("發送好了")
def send_my_email(req):
""" 發送單個人 """
title = "offer到達"
msg = "恭喜你成爲美團騎手"
email_from = settings.EMAIL_FROM
reciever = [
'[email protected]'
]
# 發送郵件
ret = send_mail(title, msg, email_from, reciever)
print(ret)
return HttpResponse("ok")
郵件驗證:
1.setting配置同上面
2.url路徑管理
urlpatterns = [
url(r'^verify/$', v2.verify), # 返回郵件確認頁
url(r'^active/(?P<random_str>.*)/$', v2.active), # 郵件確定請求路徑
]
3.view 管理
import uuid
import hashlib
from django.conf import settings
from django.template import loader
from django.core.cache import cache
from django.core.mail import send_mail,send_mass_mail
def get_random_str():
"""設置隨機"""
uuid_val = uuid.uuid4()
uuid_str = str(uuid_val).encode("utf-8")
md5 = hashlib.md5()
md5.update(uuid_str)
return md5.hexdigest()
def verify(req):
""" 發送郵件視圖 """
if req.method == "GET":
return render(req, 'verify.html')
else:
param = req.POST
email = param.get('email')
# 生成隨機字符
random_str = get_random_str()
# 拼接驗證鏈接(加網址)
url = "http://127.0.0.1:8000/active/" + random_str+"/"
# 加載激活模板
tmp = loader.get_template('active.html')
# 渲染
html_str = tmp.render({'url': url})
title = "美團騎手offer"
msg = "我們給你發一個郵件"
email_from = settings.EMAIL_FROM
reciever = [
email,
]
# 將頁面視圖發送給接受者
send_mail(title, msg, email_from, reciever, html_message=html_str)
# 記錄 token 對應的郵箱是誰 v k
cache.set(random_str, email, 120)
return HttpResponse('ok')
def active(req, random_str):
# 拿參數對應的緩存數據
res = cache.get(random_str)
if res:
# 通過郵箱找到對應用戶
# 給用戶的狀態字段做更新,從未激活變成激活狀態
return HttpResponse(res+"激活成功")
else:
return HttpResponse("驗證鏈接無效")
4. template 管理
######## verify.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/verify/" method="post" style="text-align: center">
{% csrf_token %}
<input type="text" placeholder="郵箱" name="email">
<br>
<input type="submit" value="發送">
</body>
</html>
######## active.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
歡迎註冊 澳門賭城會員 想要體驗 <span style="color: red;text-decoration: underline">美女荷官</span>
<br>
請點擊 下面的連接
<p>
<a href="{{url}}">{{url}}</a>
</p>
</body>
</html>