引言
在现代 Web 应用中,邮件通知是不可或缺的功能之一。无论是订单确认、文件处理结果通知,还是系统告警,邮件都是最常用的通信方式之一。本文将详细介绍如何基于 Python、SQLAlchemy 和 SMTP 协议,构建一个高效、可靠的邮件发送系统。我们将从需求分析、数据库设计、代码实现到优化策略,一步步实现一个支持附件发送、多收件人管理的邮件服务。
1. 需求分析
我们的系统需要满足以下核心需求:
- 多收件人支持:支持直接指定收件人邮箱,也支持通过
user_id查询关联的用户邮箱(存储在User表中),并自动去重,避免重复发送。 - 附件发送:支持发送文件附件(如 CSV、Excel 等),确保附件读取和发送的稳定性。
- 错误处理与日志:记录邮件发送状态(成功/失败),提供详细的错误日志,便于排查问题。
- 性能优化:避免重复构建邮件内容,支持批量发送,减少 SMTP 连接开销。
2. 数据库设计
邮件发送系统通常需要关联用户数据,因此我们使用 SQLAlchemy 定义数据模型:
2.1 User 表(存储用户信息)
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(120), nullable=False, unique=True)
username = db.Column(db.String(80), nullable=False)
# 其他字段...
2.2 CustomerOrder 表(关联用户订单)
class CustomerOrder(db.Model):
__tablename__ = 'customer_order'
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
tracking_number = db.Column(db.String(50), nullable=False)
order_number = db.Column(db.String(50), nullable=False)
# 其他字段...
# 定义与 User 表的关系
user = db.relationship(, backref=)


