Bot-CQBOT/python-apiproject/oemail/__init__.py

98 lines
4.0 KiB
Python
Raw Normal View History

2024-07-06 01:47:19 +00:00
# -*- coding: UTF-8 -*-
# 开发人员:萌狼蓝天
# 博客Https://mllt.cc
# 笔记Https://cnblogs.com/mllt
# 哔哩哔哩/微信公众号:萌狼蓝天
# 开发时间2022/5/6
# CodingUTF-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, "提示": "没有权限"} # 无权限操作