使用rust在debian上定时发送邮件给指定邮箱
刘清 cb31633204 新建master 2 semanas atrás
src Rust邮件发送服务First Commit 2 semanas atrás
.gitignore Rust邮件发送服务First Commit 2 semanas atrás
Cargo.toml Rust邮件发送服务First Commit 2 semanas atrás
README.md 新建master 2 semanas atrás

README.md

Rust邮件发送服务

基于Rust语言开发的异步邮件发送服务,支持SMTP协议。

功能特性

  • ✅ 异步发送邮件
  • ✅ 支持纯文本和HTML格式
  • ✅ 支持抄送、密送、回复地址
  • ✅ 支持邮件优先级设置
  • ✅ 连接池和连接复用
  • ✅ 自动重试机制
  • ✅ 完整的错误处理
  • ✅ 详细的日志记录
  • ✅ 健康检查
  • ✅ 统计信息

快速开始

1. 克隆项目

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        # 示例模板文件

如何使用

1. 初始化项目

cargo new --bin mail-sender
cd mail-sender

2. 创建目录结构

mkdir -p src
touch src/{config.rs,email_service.rs,error.rs,models.rs,utils.rs}

3. 安装依赖

# 将上述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

4. 配置环境变量

cp .env.example .env
# 编辑.env文件,填入你的配置

5. 运行项目

cargo run

6. 构建发布版本

cargo build --release

代码说明

核心组件

  1. EmailService: 邮件发送服务的核心类,负责管理SMTP连接、发送邮件、重试逻辑等。

  2. EmailConfig: 配置管理类,支持从环境变量加载配置,包含完整的SMTP服务器配置。

  3. EmailRequest: 邮件请求数据结构,包含收件人、主题、正文、附件等信息。

  4. EmailResult: 发送结果数据结构,包含发送状态、错误信息等。

异步设计

  • 使用async-std作为异步运行时

  • lettre库支持异步SMTP传输

  • 所有发送操作都是非阻塞的

错误处理

  • 使用thiserror定义详细的错误类型

  • 为外部库的错误实现了自动转换

  • 所有可能失败的操作都返回Result<T, EmailError>

功能总结

  • 重试机制: 自动重试失败的发送操作

  • 连接池: 重用SMTP连接,提高性能

  • 健康检查: 定期检查SMTP连接状态

  • 统计信息: 记录发送统计,便于监控

  • 多种格式: 支持纯文本和HTML邮件

  • 完整头部: 支持抄送、密送、回复地址等

🚀 下一步扩展建议

你现在已经有了坚实的基础,可以扩展:

  1. 邮件模板:预定义HTML模板,动态填充内容

  2. 附件支持:发送带附件的邮件

  3. 邮件队列:异步批量发送

  4. 发送统计:记录发送成功/失败率

  5. API接口:提供HTTP API供其他服务调用