dsh/mailgo:outbound-delivery
main
实现 todo.md 中「外部邮件投递功能」的阶段 1 + 阶段 2:认证用户可通过 Web 邮箱 / Outlook(SMTP 提交)向外部邮箱(QQ / Gmail / Outlook 等)发送邮件。
internal/outbound
mailer.go
manager.go
max_per_day=0
sign.go
outbound_messages
OutboundStore
internal/smtp_server/server.go
MAIL FROM
relay access denied
internal/web/handlers/mail.go
/admin/outbound
[outbound]
go test ./...
sent
Return-Path
DKIM-Signature
default._domainkey.lmve.net
451 relay access denied
nz181l177.bb60246.ctm.net
mail.lmve.net
Closes: 外部邮件投递功能 TODO
- 新增 internal/outbound 模块:MX 查询、SMTP 出站客户端(EHLO/STARTTLS/ MAIL/RCPT/DATA/QUIT)、4xx 临时失败与 5xx 永久失败分类、8BITMIME 支持 - 新增 outbound_messages 队列表与 OutboundStore,后台 worker 指数退避重试 - 永久失败/超限退信到发件人收件箱,包含原因与目标收件人 - 外发邮件使用域名 DKIM 私钥签名(go-msgauth) - SMTP 提交集成:认证用户可发外部收件人,MAIL FROM 必须等于登录用户邮箱, 未认证外部投递明确拒绝(防开放中继) - Web 发信集成:外部收件人自动入队,附件以 multipart/mixed + base64 编码 加入邮件正文 - 每用户每分钟/每日发送限速(max_per_day=0 可禁用外部投递) - 管理后台新增外发队列页面:状态统计、失败原因、手动重试/取消 - 新增 [outbound] 配置段并更新 README / todo.md
No dependencies set.
The note is not visible to the blocked user.
概述
实现 todo.md 中「外部邮件投递功能」的阶段 1 + 阶段 2:认证用户可通过 Web 邮箱 / Outlook(SMTP 提交)向外部邮箱(QQ / Gmail / Outlook 等)发送邮件。
主要改动
internal/outbound新模块mailer.go:MX 查询(无 MX 时按 RFC 5321 回退到 A 记录)、SMTP 出站客户端(EHLO / 机会性 STARTTLS / MAIL FROM / RCPT TO / DATA / QUIT)、4xx 临时失败与 5xx 永久失败分类、8BITMIME 协商manager.go:外发队列 worker(15s 轮询 + 立即触发)、指数退避重试(5/10/20/40… 分钟,上限 24h)、永久失败/超限退信到发件人收件箱、每用户每分钟/每日限速(max_per_day=0可禁用外部投递)sign.go:外发邮件 DKIM 签名(go-msgauth,使用域名管理中生成的 RSA 私钥与 selector)outbound_messages队列表 +OutboundStore:保存发件人/收件人/RawData/状态/重试次数/下次重试时间/最后 SMTP 响应,AutoMigrate 自动建表internal/smtp_server/server.go)MAIL FROM必须与登录用户邮箱一致(防伪造)relay access denied(防开放中继)internal/web/handlers/mail.go)/admin/outbound)——状态统计、投递状态、失败原因、手动重试、取消任务[outbound]段(hostname / poll_interval / max_attempts / retry_base_min / max_recipients / max_per_min / max_per_day / connect_timeout),README 补充配置说明与 DNS 条件测试
internal/outbound—— SMTP 线格式(点填充)、8BITMIME、永久失败分类、DKIM 签名与验证(go test ./...)sent,收件方收到,Return-Path/DKIM-Signature正确default._domainkey.lmve.net)验证451 relay access denied)、伪造 MAIL FROM 被拒说明
nz181l177.bb60246.ctm.net),非mail.lmve.net,需向机房/ISP 申请修改以提升信誉(Cloudflare 无法设置 PTR)。Closes: 外部邮件投递功能 TODO