Files
mail/doc/002-config-simplification.md
titor 52c5eb5ae8 feat: 重构配置文件格式并添加 IMAP ID 命令支持
- 配置文件分离:用户配置与项目配置分离,项目级配置(客户端信息、需要 ID 命令的 provider)放在代码中
- 新增 check_id 字段:用户可选择禁用单个账户的 ID 命令发送
- 简化 provider:只保留 163 和 QQ,移除未使用的 Gmail/Outlook/188 等
- 修复 163 邮箱收件箱问题:通过发送 IMAP ID 命令解决 Unsafe Login 错误

BREAKING CHANGE: 配置文件格式变化,旧配置不兼容
2026-04-10 00:39:06 +08:00

2.0 KiB

Pop 配置简化讨论

日期: 2026-04-09

背景

之前的规划中,配置结构有冗余:

  • IMAP 和 SMTP 各需要独立的 username/password
  • host/port 需要用户手动填写

讨论内容

最终配置格式

from:
  account: work  # 通过 name 引用账户

defaults:
  encryption: ssl
  insecure: false

unsafe_html: false

signature: ""

accounts:
  - name: work
    email: foolsecret@163.com
    provider: 163
    username: foolsecret@163.com
    password: xxx
    imap:
      host: imap.163.com
      port: 993
      encryption: ssl
      insecure: false
    smtp:
      host: smtp.163.com
      port: 465
      encryption: ssl
      insecure: false

配置说明

字段 说明
from.account 通过账户的 name 引用默认发件账户
defaults.encryption 全局默认加密类型 (ssl/starttls/none)
defaults.insecure 全局默认跳过 TLS 证书验证
账户内覆盖 可以在单个账户的 imap/smtp 内覆盖默认值

自动识别逻辑

  1. 自动识别 Provider: 通过邮箱后缀自动判断

    • @163.com → 163
    • @qq.com → QQ
    • @gmail.com → Gmail
    • @outlook.com / @office365.com → Outlook
    • 其他 → custom
  2. 自动填充: 根据 provider 自动填充 imap/smtp 的 host/port/encryption

  3. 统一认证: username/password 只需在账户顶层配置,会自动复制到 IMAP 和 SMTP

向后兼容

不兼容旧版配置,需要用户重新配置。

实现计划

步骤 文件 修改内容
1 config.go 新增 FromConfig 和 DefaultsConfig 结构
2 config.go 修改 normalizeAccount() 支持 defaults
3 config.go 新增 getDefaultFromEmail() 和 getDefaultAccount()
4 main.go 使用新函数获取默认账户信息
5 测试 验证配置读取和发送功能

已完成

  • 实现 config.go 修改
  • 实现 main.go 逻辑调整
  • 测试配置读取和写入