98 lines
4.0 KiB
Python
98 lines
4.0 KiB
Python
|
# -*- coding: UTF-8 -*-
|
|||
|
# 开发人员:萌狼蓝天
|
|||
|
# 博客:Https://mllt.cc
|
|||
|
# 笔记:Https://cnblogs.com/mllt
|
|||
|
# 哔哩哔哩/微信公众号:萌狼蓝天
|
|||
|
# 开发时间:2022/5/6
|
|||
|
# Coding:UTF-8
|
|||
|
import hashlib
|
|||
|
|
|||
|
import flask, json
|
|||
|
from flask import request
|
|||
|
import smtplib
|
|||
|
from email.mime.image import MIMEImage
|
|||
|
from email.mime.multipart import MIMEMultipart
|
|||
|
from email.mime.text import MIMEText
|
|||
|
from email.header import Header
|
|||
|
import random
|
|||
|
server = flask.Flask(__name__) # 将该py文件转为一个服务
|
|||
|
class EmailSentObject():
|
|||
|
"""
|
|||
|
发送邮件对象
|
|||
|
"""
|
|||
|
mail_host = "smtp.ym.163.com" # 网易企业邮箱SMTP服务器
|
|||
|
mail_admin = '' # 企业邮箱账号
|
|||
|
mail_pwd = '' # 企业邮箱密码
|
|||
|
mail_sender = "" # 企业邮箱账号
|
|||
|
admin_name = "萌狼工作室" # 发信人姓名 请查阅 https://www.cnblogs.com/mllt/p/18286902
|
|||
|
admin_email = mail_sender # 发信人邮箱 与企业邮箱账号保持一致
|
|||
|
# nc -w 2 smtp.ym.163.com 465 < /dev/null && echo "port is ok"
|
|||
|
def __init__(self, receiver_email, receivers_name, subject, content):
|
|||
|
"""
|
|||
|
邮件发送对象参数
|
|||
|
:param receiver_email: 接收者邮件,类型为List
|
|||
|
:param receivers_name: 接收者姓名,类型为string
|
|||
|
:param subject: 邮件主题,类型为string
|
|||
|
:param content: 邮件正文,支持解析HTML标签,类型为string
|
|||
|
"""
|
|||
|
self.receivers_eamil = receiver_email # 接收者邮件,类型为List
|
|||
|
self.receivers_name = receivers_name # 接收者姓名,类型为string
|
|||
|
self.subject = subject # 邮件主题,类型为string
|
|||
|
self.content = content # 邮件正文,支持解析HTML标签,类型为string
|
|||
|
|
|||
|
def sent(self):
|
|||
|
"""
|
|||
|
发送邮件
|
|||
|
:return: 成功返回 True | 失败返回 False
|
|||
|
"""
|
|||
|
message = MIMEMultipart('related')
|
|||
|
message['From'] = Header('{}<{}>'.format(self.admin_name, self.admin_email), 'utf-8') # 发信人
|
|||
|
message['To'] = Header(self.receivers_name, 'utf-8') # 收信人
|
|||
|
message['Subject'] = Header(self.subject, 'utf-8') # 邮件主题
|
|||
|
msgAlternative = MIMEMultipart('alternative')
|
|||
|
message.attach(msgAlternative)
|
|||
|
msgAlternative.attach(MIMEText(self.content, 'html', 'utf-8'))
|
|||
|
try:
|
|||
|
smtpObj = smtplib.SMTP_SSL(self.mail_host) # 连接发信服务器
|
|||
|
smtpObj.connect(self.mail_host, 465)
|
|||
|
smtpObj.login(self.mail_admin, self.mail_pwd) # 发信账号连接
|
|||
|
smtpObj.sendmail(self.mail_sender, self.receivers_eamil, message.as_string()) # 发送邮件
|
|||
|
return True
|
|||
|
except smtplib.SMTPException:
|
|||
|
return False
|
|||
|
def sendEmailCode(receiver, name):
|
|||
|
code = str(random.randint(0, 10)) + str(random.randint(0, 9)) + str(random.randint(0, 9)) + str(
|
|||
|
random.randint(0, 9)) + str(random.randint(0, 9)) + str(random.randint(0, 9))
|
|||
|
subject = "【验证码】萌狼工作室旗下产品用户操作验证码"
|
|||
|
content = """
|
|||
|
<p>[萌狼工作室]操作验证,您的验证码为</p>
|
|||
|
<h1>{}<h1>
|
|||
|
<p>验证码10分钟内有效。</p>
|
|||
|
<p>如果这不是你自己操作获得的邮件,忽略即可。</p>
|
|||
|
<small>(本邮件自动发送,无需回复)</small>
|
|||
|
""".format(code)
|
|||
|
sent = EmailSentObject(receiver, name, subject, content).sent()
|
|||
|
if sent:
|
|||
|
return code
|
|||
|
else:
|
|||
|
return -1
|
|||
|
|
|||
|
|
|||
|
def send(receiver,name,key):
|
|||
|
if receiver == "":
|
|||
|
return {"Error": 0, "提示": "未填写收信邮箱"} # 未填写邮箱
|
|||
|
if name == "":
|
|||
|
name = receiver
|
|||
|
md5hash = hashlib.md5()
|
|||
|
md5hash.update(key.encode(encoding='utf-8'))
|
|||
|
md5 = md5hash.hexdigest()
|
|||
|
if (md5 == "ffb4f6bee9830f0abbc215356a91ed2e"):
|
|||
|
code = sendEmailCode(receiver, name)
|
|||
|
if (code == -1):
|
|||
|
# 邮件发送失败
|
|||
|
return {"Error": -2, "提示": "发送失败"} # 邮件发送失败
|
|||
|
return {"user": name, "oemail": receiver, "code": code}
|
|||
|
return {"Error": -1, "提示": "没有权限"} # 无权限操作
|
|||
|
|
|||
|
|