集成邮件服务
This commit is contained in:
parent
eefacff4ae
commit
5f3e0c31be
|
@ -2,7 +2,7 @@
|
||||||
<module type="PYTHON_MODULE" version="4">
|
<module type="PYTHON_MODULE" version="4">
|
||||||
<component name="NewModuleRootManager">
|
<component name="NewModuleRootManager">
|
||||||
<content url="file://$MODULE_DIR$" />
|
<content url="file://$MODULE_DIR$" />
|
||||||
<orderEntry type="jdk" jdkName="Python 3.9" jdkType="Python SDK" />
|
<orderEntry type="jdk" jdkName="Python 3.9 virtualenv at D:\yuandong_work\project\wd-smebiz\venv" jdkType="Python SDK" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
</component>
|
</component>
|
||||||
<component name="PyDocumentationSettings">
|
<component name="PyDocumentationSettings">
|
||||||
|
|
|
@ -1,15 +1,19 @@
|
||||||
|
from copy import deepcopy
|
||||||
from fastapi import APIRouter, Depends
|
from fastapi import APIRouter, Depends
|
||||||
|
|
||||||
from context.common import conf_file_path, conf, auth_util
|
from context.common import conf_file_path, conf, auth_util
|
||||||
from . import schemas
|
from . import schemas
|
||||||
|
|
||||||
router = APIRouter(prefix="/system", dependencies=[Depends(auth_util.token_data_depend)])
|
router = APIRouter(
|
||||||
|
prefix="/system", dependencies=[Depends(auth_util.token_data_depend)])
|
||||||
|
|
||||||
|
|
||||||
@router.post("/setting/get", response_model=schemas.SettingGetRes)
|
@router.post("/setting/get", response_model=schemas.SettingGetRes)
|
||||||
def setting_get():
|
def setting_get():
|
||||||
conf.read(conf_file_path, encoding='utf-8-sig')
|
conf.read(conf_file_path, encoding='utf-8-sig')
|
||||||
return schemas.SettingGetRes(data=conf._sections)
|
data = deepcopy(conf._sections)
|
||||||
|
data = {k: v for k, v in data.items() if k in ['rate_utils']}
|
||||||
|
return schemas.SettingGetRes(data=data)
|
||||||
|
|
||||||
|
|
||||||
@router.post("/setting/update_item")
|
@router.post("/setting/update_item")
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
|
import asyncio
|
||||||
import json
|
import json
|
||||||
import requests
|
import requests
|
||||||
import re
|
import re
|
||||||
|
from fastapi_mail import FastMail, MessageSchema, ConnectionConfig, MessageType
|
||||||
|
|
||||||
|
|
||||||
def email_check(email: str):
|
def email_check(email: str):
|
||||||
|
@ -20,5 +22,29 @@ def send_email(title: str, email: str, msg_body: str, email_api="http://email_ap
|
||||||
"recipients": [email],
|
"recipients": [email],
|
||||||
"msg_body": msg_body,
|
"msg_body": msg_body,
|
||||||
}
|
}
|
||||||
res = requests.post(url=email_api + '/send_mail', headers=headers, data=json.dumps(data), timeout=5)
|
res = requests.post(url=email_api + '/send_mail',
|
||||||
|
headers=headers, data=json.dumps(data), timeout=5)
|
||||||
return res.status_code == 200
|
return res.status_code == 200
|
||||||
|
|
||||||
|
|
||||||
|
conf = ConnectionConfig(
|
||||||
|
MAIL_USERNAME="dogbillions@163.com",
|
||||||
|
MAIL_PASSWORD="RMRMGULXYJHRMATM",
|
||||||
|
MAIL_FROM="dogbillions@163.com",
|
||||||
|
MAIL_PORT=25,
|
||||||
|
MAIL_SERVER="smtp.163.com",
|
||||||
|
MAIL_FROM_NAME="维德团队",
|
||||||
|
MAIL_STARTTLS=True,
|
||||||
|
MAIL_SSL_TLS=False,
|
||||||
|
USE_CREDENTIALS=True,
|
||||||
|
VALIDATE_CERTS=True)
|
||||||
|
|
||||||
|
fm = FastMail(conf)
|
||||||
|
|
||||||
|
|
||||||
|
def send_mail(title: str, email: str, msg_body: str,sender="维德团队"):
|
||||||
|
message = MessageSchema(
|
||||||
|
subject=title,
|
||||||
|
body=f"<p>{msg_body}</p>",
|
||||||
|
subtype=MessageType.html, recipients=[email])
|
||||||
|
asyncio.run(fm.send_message(message))
|
||||||
|
|
|
@ -3,7 +3,7 @@ import uuid
|
||||||
import requests
|
import requests
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from captcha.image import ImageCaptcha
|
from captcha.image import ImageCaptcha
|
||||||
from utils.email_utils import send_email
|
from utils.email_utils import send_email,send_mail
|
||||||
from utils.random_utils import get_random_num_code, get_random_letter_and_num_code
|
from utils.random_utils import get_random_num_code, get_random_letter_and_num_code
|
||||||
from utils.redis_utils import RedisPool
|
from utils.redis_utils import RedisPool
|
||||||
|
|
||||||
|
@ -78,7 +78,7 @@ class EmailVerifyCode:
|
||||||
title = "修改信息验证码"
|
title = "修改信息验证码"
|
||||||
elif verify_type == EmailVerifyType.reset_password:
|
elif verify_type == EmailVerifyType.reset_password:
|
||||||
title = "修改密码验证码"
|
title = "修改密码验证码"
|
||||||
send_email(title, email, code)
|
send_mail(title, email, code)
|
||||||
|
|
||||||
def check_code(self, email, code, verify_type: EmailVerifyType = EmailVerifyType.login):
|
def check_code(self, email, code, verify_type: EmailVerifyType = EmailVerifyType.login):
|
||||||
email_id = self.get_email_id(email, verify_type)
|
email_id = self.get_email_id(email, verify_type)
|
||||||
|
|
Loading…
Reference in New Issue