邮箱发送及邮箱验证

发送邮件

在settings.py中添加以下设置:

EMAIL_USE_SSL = True

EMAIL_HOST = 'smtp.qq.com'  # 根据自己的邮箱修改

EMAIL_PORT = 465           # 根据自己的邮箱修改

EMAIL_HOST_USER = "xxx@qq.com"    # 输入自己的邮箱地址 

EMAIL_HOST_PASSWORD = "xxxxx"      # 输入邮箱的授权码

DEFAULT_FROM_EMAIL = EMAIL_HOST_USER    # 默认邮件的发送人

注:邮箱需开启SMTP等服务

用处:激活用户状态, 修改密码, 账单, 程序的监控,及时通知

1、简单发送email
  • 发送邮件的步骤
    • 1、设置邮件标题

    • 2、设置邮件内容

    • 3、设置收件人

    • 4、选择发送者

    • 5、发送邮件,如:send_mail(标题, 内容, 发送人, 收件人)

      def test_email(req):
          title = "test"         # 文章的标题
          msg = "这是测试内容"      # 内容
          receivers = [           # 这里可以写入收件人,以列表形式写入,可写入多个人
              xxxx@qq.com,
      		ssss@163.com
          ]
          email_from = settings.DEFAULT_FROM_EMAIL     # 默认邮件的发送人
          send_mail(title, msg, email_from, receivers) # 发送邮件
          return HttpResponse("ok")
      
2、发送HTML
  • 步骤
    • 1、加载html

    • 2、渲染html

    • 之后步骤与简单发送emai类似,在send_mail中加入html_message=渲染的html即可

      from django.template import loader
      def send_html(req):
          title = "testHTML"
          # 加载html
          template = loader.get_template("testHTML.html")
      	# 渲染html
          html = template.render({"title": "百度", "url": "https://www.baidu.com"})  # 将变量title与url传入html文件
          receivers = [
              xxxx@qq.com
          ]
          email_from = settings.DEFAULT_FROM_EMAIL
          # 再发送邮件
          send_mail(title, "", email_from, receivers, html_message=html)
          return HttpResponse("ok")
      	
      	注:html文件需要自己创建,上文中我创建了一个名为testHTML,html的文件
      
3、带附件发送邮件
  • 步骤
    • 1、标题

    • 2、内容

    • 3、收件人

    • 4、发件人

    • 5、实例化邮件信息: message = EmailMessage(标题, 内容, 发件人, 收件人)

    • 6、加载附件路径: message.attach_file(附件的路径, 文件格式)

    • 7、发送邮件

      from django.core.mail import send_mail, EmailMessage
      def file_email(req):
          title = "title001"
          msg = "随便写点什么"
          receivers = [
              ssss@qq.com
          ]
          email_from = settings.DEFAULT_FROM_EMAIL
          # 实例化邮件信息
          message = EmailMessage(title, msg, email_from, receivers)
      	# 拼接附件路径
          file_path = os.path.join(settings.STATICFILES_DIRS[0], "qingchun.jpg")
          # 加载附件路径   后面为文件格式
          message.attach_file(file_path, "image/jpg")
      
          # 发送邮件
          message.send()
          return HttpResponse("ok")
      
4、同时发送多个email
  • 步骤
    • 邮件1 msg1 = (标题, 内容, 发件人, 收件人)

    • 邮件2 msg2 = (标题, 内容, 发件人, 收件人)

    • 发送邮件 : send_mass_mail((msg1, msg2, …))

      def send_many_msg(req):
          receivers = [
              xxxx@qq.com
          ]
          email_from = settings.DEFAULT_FROM_EMAIL
          msg1 = ('title1', "msg1", email_from, receivers)
          msg2 = ("title2", "msg2", email_from, receivers)
      
          send_mass_mail((msg1, msg2))
          return HttpResponse("ok")
      

send_mail和send_mass_mail :send_mail 每一次发送都要连接到SMTP服务器,而send_mass_mail 可以连接一次发送多封

邮件验证

1、发送验证信息至邮箱
  • 步骤
    • 步骤与发送html类似

    • 1、生成验证连接

    • 2、准备好模板

    • 3、准备邮件内容

    • 4、记录缓存,建议以生成的唯一标识符为key 邮箱为value

    • 5、发送邮件

      def send_check_email(req):
      	# 获取唯一标识符,调用函数onlyStr
      	onlyStr = onlyStr()
      	url = 'http://' + req.get_host() + '/app名称/send_check_email/' + onlyStr
      
      	# 加载模板
      	template = loader.get_template("temp.html")
          html = template.render({"title": "验证", "url": url})
          title = "验证链接"
      	user_email = xxxx@qq.com
      	receivers = [
              user_email
          ]
          email_from = settings.DEFAULT_FROM_EMAIL
          send_mail(title, "", email_from, receivers, html_message=html)
      
          # 设置缓存
          cache.set(onlyStr, user_email, settings.VERIFY_CODE_MAX_AGE)
      
          return HttpResponse("注册成功,请注意查收邮件")
      
      注:settings.VERIFY_CODE_MAX_AGE为在settings.py中写入的过期时间,格式如下:
      	VERIFY_CODE_MAX_AGE = 600  # 单位为秒
      

以下为定义onlyStr的函数:

import uuid
import hashlib
def onlyStr():
    uuid_val = uuid.uuid4()
    uuid_str = str(uuid_val).encode('utf-8')
    md5 = hashlib.md5()
    md5.update(uuid_str)
    return md5.hexdigest()
2、验证邮箱
def check(req, code):
    # 去缓存拿数据
    email = cache.get(code)

    if email:
        return HttpResponse(email+"验证成功")
    else:
        return HttpResponse("验证无效")

注:若是注册账号可以给账号设置is_active属性,若邮箱验证通过则则设置为True,可以正常操作,否则为False,账号未激活
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值