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