Django 發送郵件(以QQ郵箱爲例)

參考原文: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>

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章