mobile app themes
This commit is contained in:
65
app.py
65
app.py
@@ -8,6 +8,7 @@ import smtplib
|
|||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from email.mime.text import MIMEText
|
from email.mime.text import MIMEText
|
||||||
from email.mime.multipart import MIMEMultipart
|
from email.mime.multipart import MIMEMultipart
|
||||||
|
from email.utils import formatdate
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
|
|
||||||
from flask import (
|
from flask import (
|
||||||
@@ -155,15 +156,73 @@ def send_email(to_email, subject, html_content):
|
|||||||
smtp_user = os.getenv('SMTP_USER', '')
|
smtp_user = os.getenv('SMTP_USER', '')
|
||||||
smtp_pass = os.getenv('SMTP_PASS', '')
|
smtp_pass = os.getenv('SMTP_PASS', '')
|
||||||
|
|
||||||
|
print(f'[邮件发送] 准备发送邮件到: {to_email}')
|
||||||
|
print(f'[邮件发送] SMTP服务器: {smtp_host}:{smtp_port}')
|
||||||
|
print(f'[邮件发送] 发件人: {smtp_user}')
|
||||||
|
|
||||||
|
if not smtp_user or not smtp_pass:
|
||||||
|
raise ValueError('SMTP_USER 或 SMTP_PASS 未配置')
|
||||||
|
|
||||||
msg = MIMEMultipart('alternative')
|
msg = MIMEMultipart('alternative')
|
||||||
msg['From'] = f'"验证码" <{smtp_user}>'
|
msg['From'] = smtp_user
|
||||||
msg['To'] = to_email
|
msg['To'] = to_email
|
||||||
msg['Subject'] = subject
|
msg['Subject'] = subject
|
||||||
|
msg['Date'] = formatdate(localtime=True)
|
||||||
msg.attach(MIMEText(html_content, 'html', 'utf-8'))
|
msg.attach(MIMEText(html_content, 'html', 'utf-8'))
|
||||||
|
|
||||||
with smtplib.SMTP_SSL(smtp_host, smtp_port) as server:
|
# 尝试SSL连接(端口465)
|
||||||
|
try:
|
||||||
|
print(f'[邮件发送] 尝试SSL连接 (端口{smtp_port})...')
|
||||||
|
server = smtplib.SMTP_SSL(smtp_host, smtp_port, timeout=30)
|
||||||
|
server.set_debuglevel(0)
|
||||||
|
server.ehlo()
|
||||||
|
print(f'[邮件发送] SSL连接成功,正在登录...')
|
||||||
server.login(smtp_user, smtp_pass)
|
server.login(smtp_user, smtp_pass)
|
||||||
server.sendmail(smtp_user, to_email, msg.as_string())
|
print(f'[邮件发送] 登录成功,正在发送邮件...')
|
||||||
|
server.sendmail(smtp_user, [to_email], msg.as_string())
|
||||||
|
server.quit()
|
||||||
|
print(f'[邮件发送] 邮件发送成功到 {to_email}')
|
||||||
|
return
|
||||||
|
except Exception as e:
|
||||||
|
print(f'[邮件发送] SSL方式失败: {e}')
|
||||||
|
|
||||||
|
# 尝试STARTTLS连接(端口587)
|
||||||
|
try:
|
||||||
|
print(f'[邮件发送] 尝试STARTTLS连接 (端口587)...')
|
||||||
|
server = smtplib.SMTP(smtp_host, 587, timeout=30)
|
||||||
|
server.set_debuglevel(0)
|
||||||
|
server.ehlo()
|
||||||
|
server.starttls()
|
||||||
|
server.ehlo()
|
||||||
|
print(f'[邮件发送] STARTTLS连接成功,正在登录...')
|
||||||
|
server.login(smtp_user, smtp_pass)
|
||||||
|
print(f'[邮件发送] 登录成功,正在发送邮件...')
|
||||||
|
server.sendmail(smtp_user, [to_email], msg.as_string())
|
||||||
|
server.quit()
|
||||||
|
print(f'[邮件发送] 邮件发送成功到 {to_email}')
|
||||||
|
return
|
||||||
|
except Exception as e:
|
||||||
|
print(f'[邮件发送] STARTTLS(587)方式失败: {e}')
|
||||||
|
|
||||||
|
# 尝试STARTTLS连接(端口25)
|
||||||
|
try:
|
||||||
|
print(f'[邮件发送] 尝试STARTTLS连接 (端口25)...')
|
||||||
|
server = smtplib.SMTP(smtp_host, 25, timeout=30)
|
||||||
|
server.set_debuglevel(0)
|
||||||
|
server.ehlo()
|
||||||
|
server.starttls()
|
||||||
|
server.ehlo()
|
||||||
|
print(f'[邮件发送] STARTTLS连接成功,正在登录...')
|
||||||
|
server.login(smtp_user, smtp_pass)
|
||||||
|
print(f'[邮件发送] 登录成功,正在发送邮件...')
|
||||||
|
server.sendmail(smtp_user, [to_email], msg.as_string())
|
||||||
|
server.quit()
|
||||||
|
print(f'[邮件发送] 邮件发送成功到 {to_email}')
|
||||||
|
return
|
||||||
|
except Exception as e:
|
||||||
|
print(f'[邮件发送] STARTTLS(25)方式失败: {e}')
|
||||||
|
|
||||||
|
raise Exception(f'所有邮件发送方式均失败,请检查SMTP配置和网络连接')
|
||||||
|
|
||||||
def get_current_user():
|
def get_current_user():
|
||||||
return session.get('user')
|
return session.get('user')
|
||||||
|
|||||||
Reference in New Issue
Block a user