Files
mailx/smtp/IMPROVEMENTS.md
T
2025-11-21 11:48:53 +08:00

3.3 KiB

SMTP 邮件发送优化说明

主要优化内容

1. 安全性优化

  • 敏感信息保护: 日志输出时过滤密码等敏感信息
  • TLS安全配置: 强制使用TLS 1.2+,配置安全的加密套件
  • 输入验证: 严格验证配置参数和邮件内容

2. 功能完善

  • STARTTLS支持: 添加587端口的STARTTLS连接方式
  • 多种连接方式: 支持465端口SSL和587端口STARTTLS
  • 完整收件人支持: SSL方式现在也支持Cc、Bcc和附件
  • 文件大小限制: 附件大小限制为25MB,防止内存溢出
  • MIME类型检测: 自动检测附件的正确MIME类型

3. 错误处理优化

  • 结构化日志: 使用Logger接口替代fmt.Println
  • 详细错误信息: 提供更具体的错误描述
  • 重试机制: 网络失败时自动重试最多3次
  • 超时控制: 连接超时设置为30秒

4. 代码质量提升

  • 消除重复代码: 提取公共方法处理邮件地址格式化
  • 标准时间格式: 使用RFC 1123Z标准时间格式
  • 流式文件处理: 大附件使用流式编码,节省内存
  • 配置验证: 启动时验证配置完整性

5. 性能优化

  • 认证复用: 在SetOption时创建认证,避免重复创建
  • 连接超时: 设置合理的连接超时时间
  • 内存优化: 大文件流式处理,避免全部加载到内存

新增功能

连接方式自动选择

// 根据端口自动选择连接方式
switch port {
case "465":
    // 使用直接SSL连接
case "587":
    // 使用STARTTLS
default:
    // 根据IsSSL配置选择
}

完整的邮件头支持

  • MIME-Version: 1.0
  • 标准时间格式
  • 正确的Content-Type设置
  • 支持Reply-To字段

附件处理增强

  • 文件大小检查
  • MIME类型自动检测
  • 流式base64编码
  • 76字符换行符合RFC标准

错误处理和日志

  • 结构化错误信息
  • 重试机制with指数退避
  • 详细的调试日志
  • 安全的配置日志输出

使用示例

基本用法

smtp := NewSmtp()
smtp.SetOption(ctx, func(opt *interfaces.Options) {
    opt.Smtp = &interfaces.EmailConfigDataSmtp{
        Host:     "smtp.gmail.com",
        Port:     "587",
        Username: "user@gmail.com",
        Password: "app-password",
    }
})

message := interfaces.Message{
    To:      []string{"recipient@example.com"},
    Subject: "Test Email",
    Body:    "<h1>Hello World</h1>",
}

err := smtp.Send(ctx, message)

企业邮箱

opt.Smtp = &interfaces.EmailConfigDataSmtp{
    Host:     "smtp.exmail.qq.com",
    Port:     "587",
    Username: "admin@company.com",
    Password: "password",
}

SSL连接

opt.Smtp = &interfaces.EmailConfigDataSmtp{
    Host:     "smtp.gmail.com",
    Port:     "465",
    Username: "user@gmail.com",
    Password: "app-password",
    IsSSL:    true,
}

测试覆盖

  • 配置验证测试
  • 消息验证测试
  • 邮件地址格式化测试
  • 超时设置测试
  • 性能基准测试

兼容性

  • 保持与原有接口的完全兼容
  • 支持所有主流邮件服务商
  • 支持企业邮箱系统
  • 向后兼容旧的配置方式

安全建议

  1. 使用应用专用密码而不是账户密码
  2. 在生产环境中启用TLS证书验证
  3. 定期轮换邮件服务密码
  4. 监控邮件发送日志以检测异常
  5. 限制附件大小和类型以防止滥用