Django---邮件

邮件:

在settings中配置:

EMAIL_USE_SSL = True
EMAIL_HOST = 'smtp.qq.com'
EMAIL_PORT = 465
EMAIL_HOST_USER = "[email protected]"
EMAIL_HOST_PASSWORD = "wmodnubvjmvgbbhg"
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER

发送文档:

def fayoujian(req):
    title = "什么鬼"
    msg = "什么什么鬼"
    receiver = [
        "[email protected]",
        "[email protected]"
    ]
    email_from = settings.DEFAULT_FROM_EMAIL
    send_mail(title, msg, email_from, receiver)
    return HttpResponse("ok")

发送HTML:

def html(req):
    title = "搞什么啊"
    jiazai = loader.get_template("html.html")
    xuanran = jiazai.render({"data": "哦哦哦"})
    receiver = [
        "[email protected]",
        "[email protected]"
    ]
    
    email_from = settings.DEFAULT_FROM_EMAIL
    send_mail(title, "", email_from, receiver, html_message=xuanran)
    return HttpResponse("keyi")

发送附件:

def fujian(req):
    title = "送你一个大妹子"
    msg = "...."
    receiver = [
        "[email protected]",
        "[email protected]"
    ]
    
    email_from = settings.DEFAULT_FROM_EMAIL
    message = EmailMessage(title, msg, email_from, receiver)
    path = os.path.join(settings.BASE_DIR, "static/123.jpg")
    message.attach_file(path, "image/jpg")
    message.send()
    return HttpResponse("666")

邮件验证:

在app目录下新建一个.py文件

import uuid
import hashlib
def get_uuique_str():
    uuid_str = str(uuid.uuid4()).encode("utf-8")
    md5 = hashlib.md5()
    md5.update(uuid_str)
    return md5.hexdigest()

生成一个文件名

在views中:

def send_verify_mail(req):
    uuid_str = get_unique_str()
    #拼接邮件验证的链接
    url = "http://" + req.get_host() + "/t08/verify/" + uuid_str

先拼接邮件验证的链接,通过邮件送到邮箱,供用户验证。

设置缓存:

在settings中:

VERIFY_CODE_MAX_AGE = 60 * 60

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    },
    #要使用的缓存名字
    "confirm": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/2",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    },
缓存使用,在views中:
#导入caches
from django.core.cache import caches

#实例化缓存
cache = caches['confirm']

def send_verify_mail(req):

    uuid_str = get_unique_str()

    #拼接邮件验证的链接

    url = "http://" + req.get_host() + "/t08/verify/" + uuid_str

# 加载模板 渲染
template = loader.get_template("email_template.html")
html = template.render({"title": "欢送刘恒宾", "url": url})
title = "呵呵哒"

user_email = "[email protected]" # 应该是解析用户传递过来的参数
receivers = [
    user_email
]
email_from = settings.DEFAULT_FROM_EMAIL
send_mail(title, "", email_from, receivers, html_message=html)

# 设置缓存
#uuid_str是键;user_email是值;settings.VERIFY_CODE_MAX_AGE是缓存有效时长
cache.set(uuid_str, user_email, settings.VERIFY_CODE_MAX_AGE)

return HttpResponse("注册成功,请注意查收邮件")

验证链接:

给验证链接加一个url:
url(r"^verify/(.*)", verify)
在views中加:
def verify(req, code):
    # 去缓存拿数据
    email = cache.get(code)

    if email:
        # 找到用户对象,然后更新用户状态字段 is_active=True save()
        return HttpResponse(email+"验证成功")
    else:
        return HttpResponse("验证无效")

当访问这个url是(.*)中的数据就是views中verify函数的参数code

然后 email = cache.get(code),通过code这个键去找缓存里的值,如果有就验证成功。

猜你喜欢

转载自blog.csdn.net/weixin_42903932/article/details/84671692
今日推荐