Skip to content

Commit 3d74dce

Browse files
wu-clanRanY-Luck
authored andcommitted
Optimize email sending config update logic (fastapi-practices#775)
1 parent de545a2 commit 3d74dce

File tree

3 files changed

+38
-31
lines changed

3 files changed

+38
-31
lines changed

backend/plugin/email/plugin.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[plugin]
22
summary = '电子邮件'
3-
version = '0.0.1'
3+
version = '0.0.2'
44
description = '发送电子邮件,例如验证码、通知等'
55
author = 'wu-clan'
66

backend/plugin/email/templates/captcha.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@
6060
<tr>
6161
<td align="center" style="padding: 40px 0;">
6262
<div class="container">
63-
<div class="title">验证码</div>
64-
<p style="margin-top:20px;">您好,您正在进行绑定操作,请使用以下验证码:</p>
63+
<div class="title">FBA</div>
64+
<p style="margin-top:20px;">您正在进行绑定操作,请使用以下验证码:</p>
6565
<span class="code">{{code}}</span>
6666
<p class="tips">验证码有效期为 <strong>{{expired}}分钟</strong>,请勿泄露给他人。</p>
6767
<p class="tips">

backend/plugin/email/utils/send.py

Lines changed: 35 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from sqlalchemy import inspect
1313
from sqlalchemy.ext.asyncio import AsyncSession
1414

15+
from backend.common.enums import StatusType
1516
from backend.common.exception import errors
1617
from backend.common.log import log
1718
from backend.core.conf import settings
@@ -66,46 +67,52 @@ async def send_email(
6667
:param template: 邮件内容模板
6768
:return:
6869
"""
70+
# 本地配置
71+
email_host = settings.EMAIL_HOST
72+
email_port = settings.EMAIL_PORT
73+
email_ssl = settings.EMAIL_SSL
74+
email_username = settings.EMAIL_USERNAME
75+
email_password = settings.EMAIL_PASSWORD
76+
6977
# 动态配置
70-
dynamic_email_config = None
78+
dynamic_config = None
7179

72-
# 检查 config 插件配置
7380
def get_config_table(conn):
7481
inspector = inspect(conn)
7582
return inspector.has_table('sys_config', schema=None)
7683

7784
async with async_engine.begin() as coon:
7885
exists = await coon.run_sync(get_config_table)
79-
80-
if exists:
81-
dynamic_email_config = await config_dao.get_by_type(db, 'email')
86+
if exists:
87+
dynamic_config = await config_dao.get_all(db, 'EMAIL')
88+
89+
if dynamic_config:
90+
_status_key = 'EMAIL_STATUS'
91+
_host_key = 'EMAIL_HOST'
92+
_port_key = 'EMAIL_PORT'
93+
_ssl_key = 'EMAIL_SSL'
94+
_username_key = 'EMAIL_USERNAME'
95+
_password_key = 'EMAIL_PASSWORD'
96+
97+
configs = {d['key']: d['value'] for d in select_list_serialize(dynamic_config)}
98+
if configs.get(_status_key):
99+
if len(dynamic_config) < 6:
100+
raise errors.NotFoundError(msg='缺少邮件动态配置,请检查系统参数配置-邮件配置')
101+
email_host = configs.get(_host_key)
102+
email_port = int(configs.get(_port_key, 0))
103+
email_ssl = True if configs.get(_ssl_key, '') == str(StatusType.enable.value) else False
104+
email_username = configs.get(_username_key)
105+
email_password = configs.get(_password_key)
82106

83107
try:
84-
# 动态配置发送
85-
if dynamic_email_config:
86-
configs = {d['key']: d for d in select_list_serialize(dynamic_email_config)}
87-
if configs.get('EMAIL_STATUS'):
88-
if len(dynamic_email_config) < 6:
89-
raise errors.NotFoundError(msg='缺少邮件动态配置,请检查系统参数配置-邮件配置')
90-
smtp_client = SMTP(
91-
hostname=configs.get('EMAIL_HOST'),
92-
port=configs.get('EMAIL_PORT'),
93-
use_tls=configs.get('EMAIL_SSL') == '1',
94-
)
95-
message = await render_message(subject, configs.get('EMAIL_USERNAME'), content, template) # type: ignore
96-
async with smtp_client:
97-
await smtp_client.login(configs.get('EMAIL_USERNAME'), configs.get('EMAIL_PASSWORD')) # type: ignore
98-
await smtp_client.sendmail(configs.get('EMAIL_USERNAME'), recipients, message) # type: ignore
99-
100-
# 本地配置发送
101-
message = await render_message(subject, settings.EMAIL_USERNAME, content, template)
108+
message = await render_message(subject, email_username, content, template)
102109
smtp_client = SMTP(
103-
hostname=settings.EMAIL_HOST,
104-
port=settings.EMAIL_PORT,
105-
use_tls=settings.EMAIL_SSL,
110+
hostname=email_host,
111+
port=email_port,
112+
use_tls=email_ssl,
106113
)
107114
async with smtp_client:
108-
await smtp_client.login(settings.EMAIL_USERNAME, settings.EMAIL_PASSWORD)
109-
await smtp_client.sendmail(settings.EMAIL_USERNAME, recipients, message)
115+
await smtp_client.login(email_username, email_password)
116+
await smtp_client.sendmail(email_username, recipients, message)
110117
except Exception as e:
111118
log.error(f'电子邮件发送失败:{e}')

0 commit comments

Comments
 (0)