74 lines
2.4 KiB
Python
74 lines
2.4 KiB
Python
|
|
"""
|
|||
|
|
邮件发送工具模块
|
|||
|
|
支持发送验证邮件、通知邮件等
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
import os
|
|||
|
|
import smtplib
|
|||
|
|
from email.mime.text import MIMEText
|
|||
|
|
from email.mime.multipart import MIMEMultipart
|
|||
|
|
from email.header import Header
|
|||
|
|
import logging
|
|||
|
|
|
|||
|
|
logger = logging.getLogger(__name__)
|
|||
|
|
|
|||
|
|
|
|||
|
|
class EmailSender:
|
|||
|
|
"""邮件发送器"""
|
|||
|
|
|
|||
|
|
def __init__(self):
|
|||
|
|
"""初始化邮件配置"""
|
|||
|
|
self.smtp_server = os.environ.get('SMTP_SERVER', 'smtp.gmail.com')
|
|||
|
|
self.smtp_port = int(os.environ.get('SMTP_PORT', '587'))
|
|||
|
|
self.smtp_user = os.environ.get('SMTP_USER', '')
|
|||
|
|
self.smtp_password = os.environ.get('SMTP_PASSWORD', '')
|
|||
|
|
self.from_email = os.environ.get('FROM_EMAIL', self.smtp_user)
|
|||
|
|
self.from_name = os.environ.get('FROM_NAME', 'ZJPB')
|
|||
|
|
|
|||
|
|
def send_email(self, to_email, subject, html_content, text_content=None):
|
|||
|
|
"""
|
|||
|
|
发送邮件
|
|||
|
|
|
|||
|
|
Args:
|
|||
|
|
to_email: 收件人邮箱
|
|||
|
|
subject: 邮件主题
|
|||
|
|
html_content: HTML格式邮件内容
|
|||
|
|
text_content: 纯文本格式邮件内容(可选)
|
|||
|
|
|
|||
|
|
Returns:
|
|||
|
|
bool: 发送是否成功
|
|||
|
|
"""
|
|||
|
|
try:
|
|||
|
|
# 检查配置
|
|||
|
|
if not self.smtp_user or not self.smtp_password:
|
|||
|
|
logger.error('邮件配置不完整,请设置SMTP_USER和SMTP_PASSWORD环境变量')
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
# 创建邮件对象
|
|||
|
|
message = MIMEMultipart('alternative')
|
|||
|
|
message['From'] = f'{self.from_name} <{self.from_email}>'
|
|||
|
|
message['To'] = to_email
|
|||
|
|
message['Subject'] = Header(subject, 'utf-8')
|
|||
|
|
|
|||
|
|
# 添加纯文本内容
|
|||
|
|
if text_content:
|
|||
|
|
text_part = MIMEText(text_content, 'plain', 'utf-8')
|
|||
|
|
message.attach(text_part)
|
|||
|
|
|
|||
|
|
# 添加HTML内容
|
|||
|
|
html_part = MIMEText(html_content, 'html', 'utf-8')
|
|||
|
|
message.attach(html_part)
|
|||
|
|
|
|||
|
|
# 连接SMTP服务器并发送
|
|||
|
|
with smtplib.SMTP(self.smtp_server, self.smtp_port) as server:
|
|||
|
|
server.starttls() # 启用TLS加密
|
|||
|
|
server.login(self.smtp_user, self.smtp_password)
|
|||
|
|
server.send_message(message)
|
|||
|
|
|
|||
|
|
logger.info(f'邮件发送成功: {to_email}')
|
|||
|
|
return True
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
logger.error(f'邮件发送失败: {str(e)}')
|
|||
|
|
return False
|