Django 发邮件配置

setting.py 配置:

# 邮箱配置
EMAIL_HOST = 'smtp.163.com'            # 邮箱服务器
EMAIL_PORT = 25                        # 邮箱服务器端口
EMAIL_HOST_USER = '****'               # 发件人登录帐号
EMAIL_HOST_PASSWORD = '***'            # 发件人登录密码

继承模块:

from django.core.mail import send_mail

方法:send_mail(subject, message, from_email, recipient_list)

必须参数:
subject :邮件主题,字符串
message :邮件内容 ,字符串
from_email :发件人邮箱,字符串
recipient_list:收件人,一个由邮箱地址组成的字符串列表
可选参数:

fail_silently=False,
auth_user=None                               可选的用户名用来验证SMTP服务器,未传递调用settings.py
auth_password=None,                     可选的密码用来验证 SMTP 服务器,未传递调用settings.py
connection=None,
html_message=None 发送 html 内容    
设置后使 message 的内容转义为html

注册邮件激活验证思路:

注册成功后,在 对应User 中保存一份随机验证码 ,并根据用户邮箱发送一份邮件,内容为包含随机验证码链接,如果用户保存的验证码链接中的验证码匹配,则激活用户。

用户验证并激活案例

email_send.py

from django.core.mail import send_mail
from django.template import loader,Context
import random


# 生成随机长度的字符串
def random_str(n):
    num = '0123456789'
    chars = 'abcdefghijklmnopqrstuvwxyz'
    upper_chars = chars.upper()
    random_list = random.sample((num + chars + upper_chars), n)
    code = ''.join(random_list)
    return code


# 发送邮件
def send_register_email(username,email):
    t = loader.get_template('mail.html')
    code = random_str(16)
    subject = '注册激活链接'
    message = 'http://127.0.0.1:8000/active/{0}/{1}/'.format(username,code)
    c = Context({'link':message})
    from_email = 'leeson1764@163.com'
    recipient_list = [email]
    try:
        send_mail(subject, t.render(c), from_email, recipient_list, html_message=t.render(c))
    except Exception as e:
        print(e)
    return code

views.py 用户验证和邮件激活 

from django.shortcuts import render, HttpResponse, redirect
from app import forms, models
from utils.email_send import send_register_email     # 导入email_send.py
import hashlib                                       # md5 加密

# form 验证 和 邮件发送
def sinup(request):
    ret = {}
    if request.method == 'POST':
        sinup_form = forms.SignupForm(request.POST)
        if sinup_form.is_valid():                          # 如果验证成功
            data = sinup_form.cleaned_data                 # 表单提交数据
            user = models.User()                           
            user.name = data['user']
            md5 = hashlib.md5()                            # md5 加密
            md5.update(data['password1'].encode('UTF-8'))  # md5加密
            user.pwd = md5.hexdigest()
            user.email = data['email']
            user.tel = data['tel']

            # 发送邮件,并生成验证码
            code = send_register_email(username=user.name, email=user.email)  
            user.code = code                                # 数据库中保存验证码
            user.save()
            request.session['user'] = user       
            return redirect('/index/')
        else:
            ret['sinup_form'] = sinup_form
            return render(request, 'sinup.html', ret)      # 返回错误信息
    return render(request, 'sinup.html')


def active(request, username, code):
    '''用户激活
    username :用户名
    code : 随机验证码
    '''
    obj = models.User.objects.filter(name=username, code=code).first() 
    if obj:
        obj.is_author = 1        # 激活状态 布尔值 1 表示激活
        obj.save()
    return HttpResponse('激活成功')

各大型邮箱smtp服务器及端口收集:

新浪邮箱smtp服务器  
外发服务器:smtp.vip.sina.com  
收件服务器:pop3.vip.sina.com  
新浪免费邮件  
外发服务器:smtp.sina.com.cn  
收件服务器:pop3.sina.com.cn  
  
163邮箱smtp服务器  
pop: pop.163.com  
smtp: smtp.163.com  
  
QQ邮箱smtp服务器及端口  
接收邮件服务器:imap.exmail.qq.com,使用SSL,端口号993  
发送邮件服务器:smtp.exmail.qq.com,使用SSL,端口号465或587  
  
yahoo邮箱smtp服务器  
接:pop.mail.yahoo.com.cn  
发:smtp.mail.yahoo.com  

转载于:https://my.oschina.net/esdn/blog/1480209

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值