forked from mirror/MrDoc
77 lines
2.7 KiB
Python
77 lines
2.7 KiB
Python
|
# coding:utf-8
|
|||
|
# @文件: utils.py
|
|||
|
# @创建者:州的先生
|
|||
|
# #日期:2019/11/23
|
|||
|
# 博客地址:zmister.com
|
|||
|
|
|||
|
import smtplib
|
|||
|
from django.conf import settings
|
|||
|
from email.mime.text import MIMEText
|
|||
|
from app_admin.models import SysSetting
|
|||
|
import random
|
|||
|
|
|||
|
# 生成数字验证码
|
|||
|
def generate_vcode(n=6):
|
|||
|
# 生成数字验证码
|
|||
|
_num = ''.join(map(str, range(3, 10)))
|
|||
|
vcode_str = ''.join(random.sample(_num, n))
|
|||
|
return vcode_str
|
|||
|
|
|||
|
# 发送电子邮件
|
|||
|
def send_email(to_email,vcode_str):
|
|||
|
email_enable = SysSetting.objects.get(types="basic",name='enable_email')
|
|||
|
if email_enable.value == 'on':
|
|||
|
smtp_host = SysSetting.objects.get(types='email',name='smtp_host').value
|
|||
|
send_emailer = SysSetting.objects.get(types='email', name='send_emailer').value
|
|||
|
smtp_port = SysSetting.objects.get(types='email', name='smtp_port').value
|
|||
|
username = SysSetting.objects.get(types='email', name='username').value
|
|||
|
pwd = SysSetting.objects.get(types='email', name='pwd').value
|
|||
|
ssl = SysSetting.objects.get(types='email',name='smtp_ssl').value
|
|||
|
print(smtp_host,smtp_port,send_emailer,username,pwd)
|
|||
|
|
|||
|
msg_from = send_emailer # 发件人邮箱
|
|||
|
passwd = dectry(pwd) # 发件人邮箱密码
|
|||
|
msg_to = to_email # 收件人邮箱
|
|||
|
if ssl:
|
|||
|
s = smtplib.SMTP_SSL(smtp_host, int(smtp_port)) # 发件箱邮件服务器及端口号
|
|||
|
else:
|
|||
|
s = smtplib.SMTP(smtp_host, int(smtp_host))
|
|||
|
subject = "MrDoc - 重置密码验证码"
|
|||
|
content = "你的验证码为:{},验证码30分钟内有效!".format(vcode_str)
|
|||
|
|
|||
|
msg = MIMEText(content, _subtype='html', _charset='utf-8')
|
|||
|
msg['Subject'] = subject
|
|||
|
msg['From'] = 'MrDoc助手[{}]'.format(msg_from)
|
|||
|
msg['To'] = msg_to
|
|||
|
try:
|
|||
|
s.login(username, passwd)
|
|||
|
s.sendmail(msg_from, msg_to, msg.as_string())
|
|||
|
return True
|
|||
|
except smtplib.SMTPException as e:
|
|||
|
print(repr(e))
|
|||
|
return False
|
|||
|
finally:
|
|||
|
s.quit()
|
|||
|
else:
|
|||
|
return False
|
|||
|
|
|||
|
|
|||
|
# 加密
|
|||
|
def enctry(s):
|
|||
|
k = settings.SECRET_KEY
|
|||
|
encry_str = ""
|
|||
|
for i,j in zip(s,k):
|
|||
|
# i为字符,j为秘钥字符
|
|||
|
temp = str(ord(i)+ord(j))+'_' # 加密字符 = 字符的Unicode码 + 秘钥的Unicode码
|
|||
|
encry_str = encry_str + temp
|
|||
|
return encry_str
|
|||
|
|
|||
|
# 解密
|
|||
|
def dectry(p):
|
|||
|
k = settings.SECRET_KEY
|
|||
|
dec_str = ""
|
|||
|
for i,j in zip(p.split("_")[:-1],k):
|
|||
|
# i 为加密字符,j为秘钥字符
|
|||
|
temp = chr(int(i) - ord(j)) # 解密字符 = (加密Unicode码字符 - 秘钥字符的Unicode码)的单字节字符
|
|||
|
dec_str = dec_str+temp
|
|||
|
return dec_str
|