|
|
2 settimane fa | |
|---|---|---|
| src | 2 settimane fa | |
| .gitignore | 2 settimane fa | |
| Cargo.toml | 2 settimane fa | |
| README.md | 2 settimane fa |
基于Rust语言开发的异步邮件发送服务,支持SMTP协议。
git clone <repository-url>
cd mail-sender
mail-sender/
├── Cargo.toml # 项目配置和依赖
├── .env # 环境变量(不要提交到git)
├── .env.example # 环境变量示例
├── .gitignore # Git忽略文件
├── README.md # 项目说明
└── src/
├── main.rs # 主程序入口
├── config.rs # 配置管理
├── mailer.rs # 邮件服务核心
├── models.rs # 数据模型
├── error.rs # 错误处理
├── utils.rs # 工具函数
└── templates/ # 模板系统
├── mod.rs # 模板模块入口
├── registry.rs # 模板注册和管理
└── welcome.html # 示例模板文件
cargo new --bin mail-sender
cd mail-sender
mkdir -p src
touch src/{config.rs,email_service.rs,error.rs,models.rs,utils.rs}
# 将上述Cargo.toml内容复制到项目中
cargo add lettre --features smtp-transport,builder,rustls-tls,async-std1
cargo add async-std --features attributes
cargo add dotenv config serde thiserror anyhow
cargo add log env_logger chrono uuid
cp .env.example .env
# 编辑.env文件,填入你的配置
cargo run
cargo build --release
EmailService: 邮件发送服务的核心类,负责管理SMTP连接、发送邮件、重试逻辑等。
EmailConfig: 配置管理类,支持从环境变量加载配置,包含完整的SMTP服务器配置。
EmailRequest: 邮件请求数据结构,包含收件人、主题、正文、附件等信息。
EmailResult: 发送结果数据结构,包含发送状态、错误信息等。
使用async-std作为异步运行时
lettre库支持异步SMTP传输
所有发送操作都是非阻塞的
使用thiserror定义详细的错误类型
为外部库的错误实现了自动转换
所有可能失败的操作都返回Result<T, EmailError>
重试机制: 自动重试失败的发送操作
连接池: 重用SMTP连接,提高性能
健康检查: 定期检查SMTP连接状态
统计信息: 记录发送统计,便于监控
多种格式: 支持纯文本和HTML邮件
完整头部: 支持抄送、密送、回复地址等
你现在已经有了坚实的基础,可以扩展:
邮件模板:预定义HTML模板,动态填充内容
附件支持:发送带附件的邮件
邮件队列:异步批量发送
发送统计:记录发送成功/失败率
API接口:提供HTTP API供其他服务调用